aw-highstock_rails 7.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (697) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.travis.yml +7 -0
  4. data/CODE_OF_CONDUCT.md +74 -0
  5. data/Gemfile +6 -0
  6. data/Gemfile.lock +22 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +53 -0
  9. data/Rakefile +10 -0
  10. data/aw-highstock_rails.gemspec +28 -0
  11. data/bin/console +14 -0
  12. data/bin/setup +8 -0
  13. data/lib/aw/highstock_rails.rb +9 -0
  14. data/lib/aw/highstock_rails/version.rb +5 -0
  15. data/vendor/assets/javascripts/highstock/css/annotations/popup.css +229 -0
  16. data/vendor/assets/javascripts/highstock/css/annotations/popup.scss +235 -0
  17. data/vendor/assets/javascripts/highstock/css/highcharts.css +890 -0
  18. data/vendor/assets/javascripts/highstock/css/highcharts.scss +788 -0
  19. data/vendor/assets/javascripts/highstock/css/stocktools/gui.css +268 -0
  20. data/vendor/assets/javascripts/highstock/css/stocktools/gui.scss +270 -0
  21. data/vendor/assets/javascripts/highstock/css/themes/dark-unica.css +951 -0
  22. data/vendor/assets/javascripts/highstock/css/themes/dark-unica.scss +122 -0
  23. data/vendor/assets/javascripts/highstock/css/themes/grid-light.css +904 -0
  24. data/vendor/assets/javascripts/highstock/css/themes/grid-light.scss +33 -0
  25. data/vendor/assets/javascripts/highstock/css/themes/sand-signika.css +920 -0
  26. data/vendor/assets/javascripts/highstock/css/themes/sand-signika.scss +74 -0
  27. data/vendor/assets/javascripts/highstock/es-modules/annotations/ControlPoint.js +130 -0
  28. data/vendor/assets/javascripts/highstock/es-modules/annotations/MockPoint.js +415 -0
  29. data/vendor/assets/javascripts/highstock/es-modules/annotations/annotations.src.js +1231 -0
  30. data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/ControllableCircle.js +92 -0
  31. data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/ControllableImage.js +101 -0
  32. data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/ControllableLabel.js +452 -0
  33. data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/ControllablePath.js +175 -0
  34. data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/ControllableRect.js +93 -0
  35. data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/controllableMixin.js +411 -0
  36. data/vendor/assets/javascripts/highstock/es-modules/annotations/controllable/markerMixin.js +214 -0
  37. data/vendor/assets/javascripts/highstock/es-modules/annotations/eventEmitterMixin.js +271 -0
  38. data/vendor/assets/javascripts/highstock/es-modules/annotations/navigationBindings.js +1283 -0
  39. data/vendor/assets/javascripts/highstock/es-modules/annotations/popup.js +1069 -0
  40. data/vendor/assets/javascripts/highstock/es-modules/annotations/types/CrookedLine.js +191 -0
  41. data/vendor/assets/javascripts/highstock/es-modules/annotations/types/ElliottWave.js +76 -0
  42. data/vendor/assets/javascripts/highstock/es-modules/annotations/types/Fibonacci.js +247 -0
  43. data/vendor/assets/javascripts/highstock/es-modules/annotations/types/InfinityLine.js +185 -0
  44. data/vendor/assets/javascripts/highstock/es-modules/annotations/types/Measure.js +928 -0
  45. data/vendor/assets/javascripts/highstock/es-modules/annotations/types/Pitchfork.js +203 -0
  46. data/vendor/assets/javascripts/highstock/es-modules/annotations/types/Tunnel.js +242 -0
  47. data/vendor/assets/javascripts/highstock/es-modules/annotations/types/VerticalLine.js +157 -0
  48. data/vendor/assets/javascripts/highstock/es-modules/error-messages.js +128 -0
  49. data/vendor/assets/javascripts/highstock/es-modules/error.js +1 -0
  50. data/vendor/assets/javascripts/highstock/es-modules/indicators/acceleration-bands.src.js +199 -0
  51. data/vendor/assets/javascripts/highstock/es-modules/indicators/accumulation-distribution.src.js +129 -0
  52. data/vendor/assets/javascripts/highstock/es-modules/indicators/ao.src.js +206 -0
  53. data/vendor/assets/javascripts/highstock/es-modules/indicators/apo.src.js +148 -0
  54. data/vendor/assets/javascripts/highstock/es-modules/indicators/aroon-oscillator.src.js +128 -0
  55. data/vendor/assets/javascripts/highstock/es-modules/indicators/aroon.src.js +173 -0
  56. data/vendor/assets/javascripts/highstock/es-modules/indicators/atr.src.js +151 -0
  57. data/vendor/assets/javascripts/highstock/es-modules/indicators/bollinger-bands.src.js +209 -0
  58. data/vendor/assets/javascripts/highstock/es-modules/indicators/cci.src.js +131 -0
  59. data/vendor/assets/javascripts/highstock/es-modules/indicators/chaikin.src.js +167 -0
  60. data/vendor/assets/javascripts/highstock/es-modules/indicators/cmf.src.js +246 -0
  61. data/vendor/assets/javascripts/highstock/es-modules/indicators/dema.src.js +191 -0
  62. data/vendor/assets/javascripts/highstock/es-modules/indicators/dpo.src.js +138 -0
  63. data/vendor/assets/javascripts/highstock/es-modules/indicators/ema.src.js +166 -0
  64. data/vendor/assets/javascripts/highstock/es-modules/indicators/ichimoku-kinko-hyo.src.js +850 -0
  65. data/vendor/assets/javascripts/highstock/es-modules/indicators/indicators.src.js +425 -0
  66. data/vendor/assets/javascripts/highstock/es-modules/indicators/keltner-channels.src.js +193 -0
  67. data/vendor/assets/javascripts/highstock/es-modules/indicators/macd.src.js +417 -0
  68. data/vendor/assets/javascripts/highstock/es-modules/indicators/mfi.src.js +198 -0
  69. data/vendor/assets/javascripts/highstock/es-modules/indicators/momentum.src.js +119 -0
  70. data/vendor/assets/javascripts/highstock/es-modules/indicators/natr.src.js +74 -0
  71. data/vendor/assets/javascripts/highstock/es-modules/indicators/pivot-points.src.js +360 -0
  72. data/vendor/assets/javascripts/highstock/es-modules/indicators/ppo.src.js +152 -0
  73. data/vendor/assets/javascripts/highstock/es-modules/indicators/price-channel.src.js +149 -0
  74. data/vendor/assets/javascripts/highstock/es-modules/indicators/price-envelopes.src.js +251 -0
  75. data/vendor/assets/javascripts/highstock/es-modules/indicators/psar.src.js +307 -0
  76. data/vendor/assets/javascripts/highstock/es-modules/indicators/regressions.src.js +427 -0
  77. data/vendor/assets/javascripts/highstock/es-modules/indicators/roc.src.js +149 -0
  78. data/vendor/assets/javascripts/highstock/es-modules/indicators/rsi.src.js +163 -0
  79. data/vendor/assets/javascripts/highstock/es-modules/indicators/stochastic.src.js +193 -0
  80. data/vendor/assets/javascripts/highstock/es-modules/indicators/supertrend.src.js +544 -0
  81. data/vendor/assets/javascripts/highstock/es-modules/indicators/tema.src.js +247 -0
  82. data/vendor/assets/javascripts/highstock/es-modules/indicators/trix.src.js +96 -0
  83. data/vendor/assets/javascripts/highstock/es-modules/indicators/volume-by-price.src.js +671 -0
  84. data/vendor/assets/javascripts/highstock/es-modules/indicators/vwap.src.js +189 -0
  85. data/vendor/assets/javascripts/highstock/es-modules/indicators/williams-r.src.js +128 -0
  86. data/vendor/assets/javascripts/highstock/es-modules/indicators/wma.src.js +146 -0
  87. data/vendor/assets/javascripts/highstock/es-modules/indicators/zigzag.src.js +221 -0
  88. data/vendor/assets/javascripts/highstock/es-modules/masters/highcharts-3d.src.js +17 -0
  89. data/vendor/assets/javascripts/highstock/es-modules/masters/highcharts-more.src.js +22 -0
  90. data/vendor/assets/javascripts/highstock/es-modules/masters/highstock.src.js +11 -0
  91. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/acceleration-bands.src.js +11 -0
  92. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/accumulation-distribution.src.js +11 -0
  93. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/ao.src.js +11 -0
  94. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/apo.src.js +11 -0
  95. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/aroon-oscillator.src.js +11 -0
  96. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/aroon.src.js +11 -0
  97. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/atr.src.js +11 -0
  98. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/bollinger-bands.src.js +11 -0
  99. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/cci.src.js +11 -0
  100. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/chaikin.src.js +11 -0
  101. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/cmf.src.js +10 -0
  102. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/dema.src.js +11 -0
  103. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/dpo.src.js +11 -0
  104. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/ema.src.js +11 -0
  105. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/ichimoku-kinko-hyo.src.js +11 -0
  106. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/indicators-all.src.js +49 -0
  107. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/indicators.src.js +11 -0
  108. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/keltner-channels.src.js +11 -0
  109. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/macd.src.js +11 -0
  110. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/mfi.src.js +11 -0
  111. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/momentum.src.js +11 -0
  112. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/natr.src.js +11 -0
  113. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/pivot-points.src.js +11 -0
  114. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/ppo.src.js +11 -0
  115. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/price-channel.src.js +11 -0
  116. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/price-envelopes.src.js +11 -0
  117. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/psar.src.js +11 -0
  118. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/regressions.src.js +11 -0
  119. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/roc.src.js +11 -0
  120. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/rsi.src.js +11 -0
  121. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/stochastic.src.js +11 -0
  122. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/supertrend.src.js +11 -0
  123. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/tema.src.js +11 -0
  124. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/trix.src.js +11 -0
  125. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/volume-by-price.src.js +11 -0
  126. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/vwap.src.js +11 -0
  127. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/williams-r.src.js +11 -0
  128. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/wma.src.js +11 -0
  129. data/vendor/assets/javascripts/highstock/es-modules/masters/indicators/zigzag.src.js +11 -0
  130. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/accessibility.src.js +13 -0
  131. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/annotations-advanced.src.js +20 -0
  132. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/annotations.src.js +12 -0
  133. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/arrow-symbols.src.js +10 -0
  134. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/boost-canvas.src.js +11 -0
  135. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/boost.src.js +11 -0
  136. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/bullet.src.js +11 -0
  137. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/current-date-indicator.src.js +10 -0
  138. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/cylinder.src.js +10 -0
  139. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/data.src.js +10 -0
  140. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/datagrouping.src.js +12 -0
  141. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/debugger.src.js +13 -0
  142. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/dependency-wheel.src.js +10 -0
  143. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/drag-panes.src.js +11 -0
  144. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/draggable-points.src.js +9 -0
  145. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/drilldown.src.js +10 -0
  146. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/export-data.src.js +10 -0
  147. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/exporting.src.js +10 -0
  148. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/full-screen.src.js +11 -0
  149. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/funnel.src.js +10 -0
  150. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/grid-axis.src.js +10 -0
  151. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/heatmap.src.js +11 -0
  152. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/histogram-bellcurve.src.js +11 -0
  153. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/item-series.src.js +11 -0
  154. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/networkgraph.src.js +10 -0
  155. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/no-data-to-display.src.js +11 -0
  156. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/offline-exporting.src.js +10 -0
  157. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/oldie-polyfills.src.js +11 -0
  158. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/oldie.src.js +11 -0
  159. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/overlapping-datalabels.src.js +9 -0
  160. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/parallel-coordinates.src.js +11 -0
  161. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/pareto.src.js +11 -0
  162. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/pathfinder.src.js +10 -0
  163. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/pattern-fill.src.js +11 -0
  164. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/price-indicator.src.js +11 -0
  165. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/sankey.src.js +10 -0
  166. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/series-label.src.js +9 -0
  167. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/solid-gauge.src.js +10 -0
  168. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/sonification.src.js +12 -0
  169. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/static-scale.src.js +10 -0
  170. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/stock-tools.src.js +12 -0
  171. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/stock.src.js +19 -0
  172. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/streamgraph.src.js +10 -0
  173. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/sunburst.src.js +10 -0
  174. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/tilemap.src.js +10 -0
  175. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/timeline.src.js +11 -0
  176. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/treegrid.src.js +10 -0
  177. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/treemap.src.js +10 -0
  178. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/variable-pie.src.js +11 -0
  179. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/variwide.src.js +10 -0
  180. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/vector.src.js +10 -0
  181. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/venn.src.js +10 -0
  182. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/windbarb.src.js +10 -0
  183. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/wordcloud.src.js +10 -0
  184. data/vendor/assets/javascripts/highstock/es-modules/masters/modules/xrange.src.js +10 -0
  185. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/avocado.js +9 -0
  186. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/avocado.src.js +9 -0
  187. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/dark-blue.src.js +9 -0
  188. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/dark-green.src.js +9 -0
  189. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/dark-unica.src.js +9 -0
  190. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/gray.src.js +9 -0
  191. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/grid-light.src.js +9 -0
  192. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/grid.src.js +9 -0
  193. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/sand-signika.src.js +9 -0
  194. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/skies.src.js +9 -0
  195. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/sunset.js +9 -0
  196. data/vendor/assets/javascripts/highstock/es-modules/masters/themes/sunset.src.js +9 -0
  197. data/vendor/assets/javascripts/highstock/es-modules/mixins/ajax.js +123 -0
  198. data/vendor/assets/javascripts/highstock/es-modules/mixins/centered-series.js +116 -0
  199. data/vendor/assets/javascripts/highstock/es-modules/mixins/derived-series.js +150 -0
  200. data/vendor/assets/javascripts/highstock/es-modules/mixins/download-url.js +103 -0
  201. data/vendor/assets/javascripts/highstock/es-modules/mixins/draw-point.js +51 -0
  202. data/vendor/assets/javascripts/highstock/es-modules/mixins/geometry-circles.js +300 -0
  203. data/vendor/assets/javascripts/highstock/es-modules/mixins/geometry.js +50 -0
  204. data/vendor/assets/javascripts/highstock/es-modules/mixins/indicator-required.js +49 -0
  205. data/vendor/assets/javascripts/highstock/es-modules/mixins/multipe-lines.js +223 -0
  206. data/vendor/assets/javascripts/highstock/es-modules/mixins/navigation.js +59 -0
  207. data/vendor/assets/javascripts/highstock/es-modules/mixins/nodes.js +76 -0
  208. data/vendor/assets/javascripts/highstock/es-modules/mixins/on-series.js +167 -0
  209. data/vendor/assets/javascripts/highstock/es-modules/mixins/polygon.js +293 -0
  210. data/vendor/assets/javascripts/highstock/es-modules/mixins/reduce-array.js +53 -0
  211. data/vendor/assets/javascripts/highstock/es-modules/mixins/tree-series.js +256 -0
  212. data/vendor/assets/javascripts/highstock/es-modules/modules/a11y-i18n.src.js +524 -0
  213. data/vendor/assets/javascripts/highstock/es-modules/modules/annotations-legacy.src.js +1951 -0
  214. data/vendor/assets/javascripts/highstock/es-modules/modules/bellcurve.src.js +173 -0
  215. data/vendor/assets/javascripts/highstock/es-modules/modules/boost-canvas.src.js +732 -0
  216. data/vendor/assets/javascripts/highstock/es-modules/modules/boost.src.js +3730 -0
  217. data/vendor/assets/javascripts/highstock/es-modules/modules/bullet.src.js +361 -0
  218. data/vendor/assets/javascripts/highstock/es-modules/modules/cylinder.src.js +389 -0
  219. data/vendor/assets/javascripts/highstock/es-modules/modules/data.src.js +2417 -0
  220. data/vendor/assets/javascripts/highstock/es-modules/modules/debugger.src.js +109 -0
  221. data/vendor/assets/javascripts/highstock/es-modules/modules/dependency-wheel.src.js +199 -0
  222. data/vendor/assets/javascripts/highstock/es-modules/modules/drag-panes.src.js +624 -0
  223. data/vendor/assets/javascripts/highstock/es-modules/modules/draggable-points.src.js +2625 -0
  224. data/vendor/assets/javascripts/highstock/es-modules/modules/drilldown.src.js +1300 -0
  225. data/vendor/assets/javascripts/highstock/es-modules/modules/export-data.src.js +983 -0
  226. data/vendor/assets/javascripts/highstock/es-modules/modules/exporting.src.js +2149 -0
  227. data/vendor/assets/javascripts/highstock/es-modules/modules/full-screen.src.js +40 -0
  228. data/vendor/assets/javascripts/highstock/es-modules/modules/funnel.src.js +552 -0
  229. data/vendor/assets/javascripts/highstock/es-modules/modules/histogram.src.js +229 -0
  230. data/vendor/assets/javascripts/highstock/es-modules/modules/item-series.src.js +150 -0
  231. data/vendor/assets/javascripts/highstock/es-modules/modules/keyboard-navigation.src.js +1606 -0
  232. data/vendor/assets/javascripts/highstock/es-modules/modules/networkgraph/QuadTree.js +175 -0
  233. data/vendor/assets/javascripts/highstock/es-modules/modules/networkgraph/layouts.js +506 -0
  234. data/vendor/assets/javascripts/highstock/es-modules/modules/networkgraph/networkgraph.src.js +740 -0
  235. data/vendor/assets/javascripts/highstock/es-modules/modules/no-data-to-display.src.js +260 -0
  236. data/vendor/assets/javascripts/highstock/es-modules/modules/offline-exporting.src.js +710 -0
  237. data/vendor/assets/javascripts/highstock/es-modules/modules/oldie-polyfills.src.js +121 -0
  238. data/vendor/assets/javascripts/highstock/es-modules/modules/oldie.src.js +1556 -0
  239. data/vendor/assets/javascripts/highstock/es-modules/modules/overlapping-datalabels.src.js +250 -0
  240. data/vendor/assets/javascripts/highstock/es-modules/modules/parallel-coordinates.src.js +492 -0
  241. data/vendor/assets/javascripts/highstock/es-modules/modules/pareto.src.js +152 -0
  242. data/vendor/assets/javascripts/highstock/es-modules/modules/pattern-fill.src.js +607 -0
  243. data/vendor/assets/javascripts/highstock/es-modules/modules/price-indicator.src.js +149 -0
  244. data/vendor/assets/javascripts/highstock/es-modules/modules/sankey.src.js +809 -0
  245. data/vendor/assets/javascripts/highstock/es-modules/modules/screen-reader.src.js +954 -0
  246. data/vendor/assets/javascripts/highstock/es-modules/modules/series-label.src.js +1042 -0
  247. data/vendor/assets/javascripts/highstock/es-modules/modules/solid-gauge.src.js +486 -0
  248. data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/Earcon.js +184 -0
  249. data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/Instrument.js +582 -0
  250. data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/Timeline.js +702 -0
  251. data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/chartSonify.js +1026 -0
  252. data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/instrumentDefinitions.js +37 -0
  253. data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/musicalFrequencies.js +113 -0
  254. data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/pointSonify.js +385 -0
  255. data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/sonification.js +107 -0
  256. data/vendor/assets/javascripts/highstock/es-modules/modules/sonification/utilities.js +178 -0
  257. data/vendor/assets/javascripts/highstock/es-modules/modules/static-scale.src.js +88 -0
  258. data/vendor/assets/javascripts/highstock/es-modules/modules/stock-tools-bindings.js +1950 -0
  259. data/vendor/assets/javascripts/highstock/es-modules/modules/stock-tools-gui.js +1458 -0
  260. data/vendor/assets/javascripts/highstock/es-modules/modules/streamgraph.src.js +132 -0
  261. data/vendor/assets/javascripts/highstock/es-modules/modules/sunburst.src.js +1041 -0
  262. data/vendor/assets/javascripts/highstock/es-modules/modules/tilemap.src.js +769 -0
  263. data/vendor/assets/javascripts/highstock/es-modules/modules/timeline.src.js +750 -0
  264. data/vendor/assets/javascripts/highstock/es-modules/modules/treemap.src.js +1803 -0
  265. data/vendor/assets/javascripts/highstock/es-modules/modules/variable-pie.src.js +459 -0
  266. data/vendor/assets/javascripts/highstock/es-modules/modules/variwide.src.js +350 -0
  267. data/vendor/assets/javascripts/highstock/es-modules/modules/vector.src.js +354 -0
  268. data/vendor/assets/javascripts/highstock/es-modules/modules/venn.src.js +1192 -0
  269. data/vendor/assets/javascripts/highstock/es-modules/modules/windbarb.src.js +380 -0
  270. data/vendor/assets/javascripts/highstock/es-modules/modules/wordcloud.src.js +1103 -0
  271. data/vendor/assets/javascripts/highstock/es-modules/modules/xrange.src.js +761 -0
  272. data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Axis.js +669 -0
  273. data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Chart.js +1753 -0
  274. data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Column.js +437 -0
  275. data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Math.js +206 -0
  276. data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Pie.js +207 -0
  277. data/vendor/assets/javascripts/highstock/es-modules/parts-3d/SVGRenderer.js +1002 -0
  278. data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Scatter.js +154 -0
  279. data/vendor/assets/javascripts/highstock/es-modules/parts-3d/Series.js +73 -0
  280. data/vendor/assets/javascripts/highstock/es-modules/parts-3d/VMLRenderer.js +62 -0
  281. data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/ArrowSymbols.js +198 -0
  282. data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/CurrentDateIndicator.js +100 -0
  283. data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/GanttChart.js +140 -0
  284. data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/GanttSeries.js +415 -0
  285. data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/GridAxis.js +961 -0
  286. data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/Pathfinder.js +1298 -0
  287. data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/PathfinderAlgorithms.js +816 -0
  288. data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/Tree.js +158 -0
  289. data/vendor/assets/javascripts/highstock/es-modules/parts-gantt/TreeGrid.js +1003 -0
  290. data/vendor/assets/javascripts/highstock/es-modules/parts-map/ColorAxis.js +1103 -0
  291. data/vendor/assets/javascripts/highstock/es-modules/parts-map/ColorSeriesMixin.js +138 -0
  292. data/vendor/assets/javascripts/highstock/es-modules/parts-map/GeoJSON.js +435 -0
  293. data/vendor/assets/javascripts/highstock/es-modules/parts-map/HeatmapSeries.js +474 -0
  294. data/vendor/assets/javascripts/highstock/es-modules/parts-map/Map.js +477 -0
  295. data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapAxis.js +124 -0
  296. data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapBubbleSeries.js +274 -0
  297. data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapLineSeries.js +143 -0
  298. data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapNavigation.js +357 -0
  299. data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapPointSeries.js +187 -0
  300. data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapPointer.js +132 -0
  301. data/vendor/assets/javascripts/highstock/es-modules/parts-map/MapSeries.js +1294 -0
  302. data/vendor/assets/javascripts/highstock/es-modules/parts-more/AreaRangeSeries.js +725 -0
  303. data/vendor/assets/javascripts/highstock/es-modules/parts-more/AreaSplineRangeSeries.js +98 -0
  304. data/vendor/assets/javascripts/highstock/es-modules/parts-more/BoxPlotSeries.js +617 -0
  305. data/vendor/assets/javascripts/highstock/es-modules/parts-more/BubbleLegend.js +1167 -0
  306. data/vendor/assets/javascripts/highstock/es-modules/parts-more/BubbleSeries.js +661 -0
  307. data/vendor/assets/javascripts/highstock/es-modules/parts-more/ColumnPyramidSeries.js +288 -0
  308. data/vendor/assets/javascripts/highstock/es-modules/parts-more/ColumnRangeSeries.js +278 -0
  309. data/vendor/assets/javascripts/highstock/es-modules/parts-more/ErrorBarSeries.js +172 -0
  310. data/vendor/assets/javascripts/highstock/es-modules/parts-more/GaugeSeries.js +618 -0
  311. data/vendor/assets/javascripts/highstock/es-modules/parts-more/PackedBubbleSeries.js +567 -0
  312. data/vendor/assets/javascripts/highstock/es-modules/parts-more/Pane.js +399 -0
  313. data/vendor/assets/javascripts/highstock/es-modules/parts-more/Polar.js +634 -0
  314. data/vendor/assets/javascripts/highstock/es-modules/parts-more/PolygonSeries.js +151 -0
  315. data/vendor/assets/javascripts/highstock/es-modules/parts-more/RadialAxis.js +685 -0
  316. data/vendor/assets/javascripts/highstock/es-modules/parts-more/WaterfallSeries.js +765 -0
  317. data/vendor/assets/javascripts/highstock/es-modules/parts.js +684 -0
  318. data/vendor/assets/javascripts/highstock/es-modules/parts/AreaSeries.js +578 -0
  319. data/vendor/assets/javascripts/highstock/es-modules/parts/AreaSplineSeries.js +122 -0
  320. data/vendor/assets/javascripts/highstock/es-modules/parts/Axis.js +6453 -0
  321. data/vendor/assets/javascripts/highstock/es-modules/parts/BarSeries.js +153 -0
  322. data/vendor/assets/javascripts/highstock/es-modules/parts/CandlestickSeries.js +358 -0
  323. data/vendor/assets/javascripts/highstock/es-modules/parts/Chart.js +2307 -0
  324. data/vendor/assets/javascripts/highstock/es-modules/parts/Color.js +301 -0
  325. data/vendor/assets/javascripts/highstock/es-modules/parts/ColumnSeries.js +1125 -0
  326. data/vendor/assets/javascripts/highstock/es-modules/parts/DataGrouping.js +1115 -0
  327. data/vendor/assets/javascripts/highstock/es-modules/parts/DataLabels.js +1431 -0
  328. data/vendor/assets/javascripts/highstock/es-modules/parts/DateTimeAxis.js +134 -0
  329. data/vendor/assets/javascripts/highstock/es-modules/parts/Dynamics.js +1301 -0
  330. data/vendor/assets/javascripts/highstock/es-modules/parts/FlagsSeries.js +739 -0
  331. data/vendor/assets/javascripts/highstock/es-modules/parts/Globals.js +75 -0
  332. data/vendor/assets/javascripts/highstock/es-modules/parts/Html.js +539 -0
  333. data/vendor/assets/javascripts/highstock/es-modules/parts/Interaction.js +1299 -0
  334. data/vendor/assets/javascripts/highstock/es-modules/parts/Legend.js +1411 -0
  335. data/vendor/assets/javascripts/highstock/es-modules/parts/LogarithmicAxis.js +168 -0
  336. data/vendor/assets/javascripts/highstock/es-modules/parts/MSPointer.js +176 -0
  337. data/vendor/assets/javascripts/highstock/es-modules/parts/Navigator.js +2486 -0
  338. data/vendor/assets/javascripts/highstock/es-modules/parts/OHLCSeries.js +412 -0
  339. data/vendor/assets/javascripts/highstock/es-modules/parts/Options.js +3732 -0
  340. data/vendor/assets/javascripts/highstock/es-modules/parts/OrdinalAxis.js +962 -0
  341. data/vendor/assets/javascripts/highstock/es-modules/parts/PieSeries.js +1328 -0
  342. data/vendor/assets/javascripts/highstock/es-modules/parts/PlotBandSeries.experimental.js +74 -0
  343. data/vendor/assets/javascripts/highstock/es-modules/parts/PlotLineOrBand.js +1061 -0
  344. data/vendor/assets/javascripts/highstock/es-modules/parts/Point.js +681 -0
  345. data/vendor/assets/javascripts/highstock/es-modules/parts/Pointer.js +1332 -0
  346. data/vendor/assets/javascripts/highstock/es-modules/parts/RangeSelector.js +2063 -0
  347. data/vendor/assets/javascripts/highstock/es-modules/parts/Responsive.js +295 -0
  348. data/vendor/assets/javascripts/highstock/es-modules/parts/ScatterSeries.js +278 -0
  349. data/vendor/assets/javascripts/highstock/es-modules/parts/ScrollablePlotArea.js +266 -0
  350. data/vendor/assets/javascripts/highstock/es-modules/parts/Scrollbar.js +1134 -0
  351. data/vendor/assets/javascripts/highstock/es-modules/parts/Series.js +5864 -0
  352. data/vendor/assets/javascripts/highstock/es-modules/parts/SplineSeries.js +267 -0
  353. data/vendor/assets/javascripts/highstock/es-modules/parts/Stacking.js +604 -0
  354. data/vendor/assets/javascripts/highstock/es-modules/parts/StockChart.js +951 -0
  355. data/vendor/assets/javascripts/highstock/es-modules/parts/SvgRenderer.js +5109 -0
  356. data/vendor/assets/javascripts/highstock/es-modules/parts/Tick.js +746 -0
  357. data/vendor/assets/javascripts/highstock/es-modules/parts/Time.js +881 -0
  358. data/vendor/assets/javascripts/highstock/es-modules/parts/Tooltip.js +1318 -0
  359. data/vendor/assets/javascripts/highstock/es-modules/parts/TouchPointer.js +404 -0
  360. data/vendor/assets/javascripts/highstock/es-modules/parts/Utilities.js +2751 -0
  361. data/vendor/assets/javascripts/highstock/es-modules/themes/avocado.js +37 -0
  362. data/vendor/assets/javascripts/highstock/es-modules/themes/dark-blue.js +259 -0
  363. data/vendor/assets/javascripts/highstock/es-modules/themes/dark-green.js +261 -0
  364. data/vendor/assets/javascripts/highstock/es-modules/themes/dark-unica.js +220 -0
  365. data/vendor/assets/javascripts/highstock/es-modules/themes/gray.js +267 -0
  366. data/vendor/assets/javascripts/highstock/es-modules/themes/grid-light.js +81 -0
  367. data/vendor/assets/javascripts/highstock/es-modules/themes/grid.js +110 -0
  368. data/vendor/assets/javascripts/highstock/es-modules/themes/sand-signika.js +111 -0
  369. data/vendor/assets/javascripts/highstock/es-modules/themes/skies.js +100 -0
  370. data/vendor/assets/javascripts/highstock/es-modules/themes/sunset.js +36 -0
  371. data/vendor/assets/javascripts/highstock/highcharts-3d.js +85 -0
  372. data/vendor/assets/javascripts/highstock/highcharts-3d.js.map +1 -0
  373. data/vendor/assets/javascripts/highstock/highcharts-more.js +101 -0
  374. data/vendor/assets/javascripts/highstock/highcharts-more.js.map +1 -0
  375. data/vendor/assets/javascripts/highstock/highstock.js +583 -0
  376. data/vendor/assets/javascripts/highstock/highstock.js.map +1 -0
  377. data/vendor/assets/javascripts/highstock/indicators/acceleration-bands.js +16 -0
  378. data/vendor/assets/javascripts/highstock/indicators/acceleration-bands.js.map +1 -0
  379. data/vendor/assets/javascripts/highstock/indicators/acceleration-bands.src.js +448 -0
  380. data/vendor/assets/javascripts/highstock/indicators/accumulation-distribution.js +12 -0
  381. data/vendor/assets/javascripts/highstock/indicators/accumulation-distribution.js.map +1 -0
  382. data/vendor/assets/javascripts/highstock/indicators/accumulation-distribution.src.js +156 -0
  383. data/vendor/assets/javascripts/highstock/indicators/ao.js +13 -0
  384. data/vendor/assets/javascripts/highstock/indicators/ao.js.map +1 -0
  385. data/vendor/assets/javascripts/highstock/indicators/ao.src.js +233 -0
  386. data/vendor/assets/javascripts/highstock/indicators/apo.js +13 -0
  387. data/vendor/assets/javascripts/highstock/indicators/apo.js.map +1 -0
  388. data/vendor/assets/javascripts/highstock/indicators/apo.src.js +223 -0
  389. data/vendor/assets/javascripts/highstock/indicators/aroon-oscillator.js +15 -0
  390. data/vendor/assets/javascripts/highstock/indicators/aroon-oscillator.js.map +1 -0
  391. data/vendor/assets/javascripts/highstock/indicators/aroon-oscillator.src.js +426 -0
  392. data/vendor/assets/javascripts/highstock/indicators/aroon.js +16 -0
  393. data/vendor/assets/javascripts/highstock/indicators/aroon.js.map +1 -0
  394. data/vendor/assets/javascripts/highstock/indicators/aroon.src.js +423 -0
  395. data/vendor/assets/javascripts/highstock/indicators/atr.js +12 -0
  396. data/vendor/assets/javascripts/highstock/indicators/atr.js.map +1 -0
  397. data/vendor/assets/javascripts/highstock/indicators/atr.src.js +178 -0
  398. data/vendor/assets/javascripts/highstock/indicators/bollinger-bands.js +16 -0
  399. data/vendor/assets/javascripts/highstock/indicators/bollinger-bands.js.map +1 -0
  400. data/vendor/assets/javascripts/highstock/indicators/bollinger-bands.src.js +458 -0
  401. data/vendor/assets/javascripts/highstock/indicators/cci.js +12 -0
  402. data/vendor/assets/javascripts/highstock/indicators/cci.js.map +1 -0
  403. data/vendor/assets/javascripts/highstock/indicators/cci.src.js +158 -0
  404. data/vendor/assets/javascripts/highstock/indicators/chaikin.js +15 -0
  405. data/vendor/assets/javascripts/highstock/indicators/chaikin.js.map +1 -0
  406. data/vendor/assets/javascripts/highstock/indicators/chaikin.src.js +370 -0
  407. data/vendor/assets/javascripts/highstock/indicators/cmf.js +12 -0
  408. data/vendor/assets/javascripts/highstock/indicators/cmf.js.map +1 -0
  409. data/vendor/assets/javascripts/highstock/indicators/cmf.src.js +273 -0
  410. data/vendor/assets/javascripts/highstock/indicators/dema.js +13 -0
  411. data/vendor/assets/javascripts/highstock/indicators/dema.js.map +1 -0
  412. data/vendor/assets/javascripts/highstock/indicators/dema.src.js +266 -0
  413. data/vendor/assets/javascripts/highstock/indicators/dpo.js +12 -0
  414. data/vendor/assets/javascripts/highstock/indicators/dpo.js.map +1 -0
  415. data/vendor/assets/javascripts/highstock/indicators/dpo.src.js +166 -0
  416. data/vendor/assets/javascripts/highstock/indicators/ema.js +12 -0
  417. data/vendor/assets/javascripts/highstock/indicators/ema.js.map +1 -0
  418. data/vendor/assets/javascripts/highstock/indicators/ema.src.js +193 -0
  419. data/vendor/assets/javascripts/highstock/indicators/ichimoku-kinko-hyo.js +22 -0
  420. data/vendor/assets/javascripts/highstock/indicators/ichimoku-kinko-hyo.js.map +1 -0
  421. data/vendor/assets/javascripts/highstock/indicators/ichimoku-kinko-hyo.src.js +877 -0
  422. data/vendor/assets/javascripts/highstock/indicators/indicators-all.js +117 -0
  423. data/vendor/assets/javascripts/highstock/indicators/indicators-all.js.map +1 -0
  424. data/vendor/assets/javascripts/highstock/indicators/indicators-all.src.js +9389 -0
  425. data/vendor/assets/javascripts/highstock/indicators/indicators.js +17 -0
  426. data/vendor/assets/javascripts/highstock/indicators/indicators.js.map +1 -0
  427. data/vendor/assets/javascripts/highstock/indicators/indicators.src.js +500 -0
  428. data/vendor/assets/javascripts/highstock/indicators/keltner-channels.js +16 -0
  429. data/vendor/assets/javascripts/highstock/indicators/keltner-channels.js.map +1 -0
  430. data/vendor/assets/javascripts/highstock/indicators/keltner-channels.src.js +442 -0
  431. data/vendor/assets/javascripts/highstock/indicators/macd.js +18 -0
  432. data/vendor/assets/javascripts/highstock/indicators/macd.js.map +1 -0
  433. data/vendor/assets/javascripts/highstock/indicators/macd.src.js +444 -0
  434. data/vendor/assets/javascripts/highstock/indicators/mfi.js +13 -0
  435. data/vendor/assets/javascripts/highstock/indicators/mfi.js.map +1 -0
  436. data/vendor/assets/javascripts/highstock/indicators/mfi.src.js +225 -0
  437. data/vendor/assets/javascripts/highstock/indicators/momentum.js +12 -0
  438. data/vendor/assets/javascripts/highstock/indicators/momentum.js.map +1 -0
  439. data/vendor/assets/javascripts/highstock/indicators/momentum.src.js +146 -0
  440. data/vendor/assets/javascripts/highstock/indicators/natr.js +12 -0
  441. data/vendor/assets/javascripts/highstock/indicators/natr.js.map +1 -0
  442. data/vendor/assets/javascripts/highstock/indicators/natr.src.js +101 -0
  443. data/vendor/assets/javascripts/highstock/indicators/pivot-points.js +16 -0
  444. data/vendor/assets/javascripts/highstock/indicators/pivot-points.js.map +1 -0
  445. data/vendor/assets/javascripts/highstock/indicators/pivot-points.src.js +387 -0
  446. data/vendor/assets/javascripts/highstock/indicators/ppo.js +13 -0
  447. data/vendor/assets/javascripts/highstock/indicators/ppo.js.map +1 -0
  448. data/vendor/assets/javascripts/highstock/indicators/ppo.src.js +227 -0
  449. data/vendor/assets/javascripts/highstock/indicators/price-channel.js +16 -0
  450. data/vendor/assets/javascripts/highstock/indicators/price-channel.js.map +1 -0
  451. data/vendor/assets/javascripts/highstock/indicators/price-channel.src.js +450 -0
  452. data/vendor/assets/javascripts/highstock/indicators/price-envelopes.js +15 -0
  453. data/vendor/assets/javascripts/highstock/indicators/price-envelopes.js.map +1 -0
  454. data/vendor/assets/javascripts/highstock/indicators/price-envelopes.src.js +278 -0
  455. data/vendor/assets/javascripts/highstock/indicators/psar.js +13 -0
  456. data/vendor/assets/javascripts/highstock/indicators/psar.js.map +1 -0
  457. data/vendor/assets/javascripts/highstock/indicators/psar.src.js +334 -0
  458. data/vendor/assets/javascripts/highstock/indicators/regressions.js +14 -0
  459. data/vendor/assets/javascripts/highstock/indicators/regressions.js.map +1 -0
  460. data/vendor/assets/javascripts/highstock/indicators/regressions.src.js +454 -0
  461. data/vendor/assets/javascripts/highstock/indicators/roc.js +12 -0
  462. data/vendor/assets/javascripts/highstock/indicators/roc.js.map +1 -0
  463. data/vendor/assets/javascripts/highstock/indicators/roc.src.js +176 -0
  464. data/vendor/assets/javascripts/highstock/indicators/rsi.js +12 -0
  465. data/vendor/assets/javascripts/highstock/indicators/rsi.js.map +1 -0
  466. data/vendor/assets/javascripts/highstock/indicators/rsi.src.js +190 -0
  467. data/vendor/assets/javascripts/highstock/indicators/stochastic.js +17 -0
  468. data/vendor/assets/javascripts/highstock/indicators/stochastic.js.map +1 -0
  469. data/vendor/assets/javascripts/highstock/indicators/stochastic.src.js +494 -0
  470. data/vendor/assets/javascripts/highstock/indicators/supertrend.js +17 -0
  471. data/vendor/assets/javascripts/highstock/indicators/supertrend.js.map +1 -0
  472. data/vendor/assets/javascripts/highstock/indicators/supertrend.src.js +571 -0
  473. data/vendor/assets/javascripts/highstock/indicators/tema.js +14 -0
  474. data/vendor/assets/javascripts/highstock/indicators/tema.js.map +1 -0
  475. data/vendor/assets/javascripts/highstock/indicators/tema.src.js +322 -0
  476. data/vendor/assets/javascripts/highstock/indicators/trix.js +12 -0
  477. data/vendor/assets/javascripts/highstock/indicators/trix.js.map +1 -0
  478. data/vendor/assets/javascripts/highstock/indicators/trix.src.js +171 -0
  479. data/vendor/assets/javascripts/highstock/indicators/volume-by-price.js +21 -0
  480. data/vendor/assets/javascripts/highstock/indicators/volume-by-price.js.map +1 -0
  481. data/vendor/assets/javascripts/highstock/indicators/volume-by-price.src.js +698 -0
  482. data/vendor/assets/javascripts/highstock/indicators/vwap.js +12 -0
  483. data/vendor/assets/javascripts/highstock/indicators/vwap.js.map +1 -0
  484. data/vendor/assets/javascripts/highstock/indicators/vwap.src.js +216 -0
  485. data/vendor/assets/javascripts/highstock/indicators/williams-r.js +13 -0
  486. data/vendor/assets/javascripts/highstock/indicators/williams-r.js.map +1 -0
  487. data/vendor/assets/javascripts/highstock/indicators/williams-r.src.js +207 -0
  488. data/vendor/assets/javascripts/highstock/indicators/wma.js +12 -0
  489. data/vendor/assets/javascripts/highstock/indicators/wma.js.map +1 -0
  490. data/vendor/assets/javascripts/highstock/indicators/wma.src.js +173 -0
  491. data/vendor/assets/javascripts/highstock/indicators/zigzag.js +13 -0
  492. data/vendor/assets/javascripts/highstock/indicators/zigzag.js.map +1 -0
  493. data/vendor/assets/javascripts/highstock/indicators/zigzag.src.js +248 -0
  494. data/vendor/assets/javascripts/highstock/lib/canvg.js +130 -0
  495. data/vendor/assets/javascripts/highstock/lib/canvg.src.js +3073 -0
  496. data/vendor/assets/javascripts/highstock/lib/jspdf.js +283 -0
  497. data/vendor/assets/javascripts/highstock/lib/jspdf.src.js +21627 -0
  498. data/vendor/assets/javascripts/highstock/lib/rgbcolor.js +17 -0
  499. data/vendor/assets/javascripts/highstock/lib/rgbcolor.src.js +299 -0
  500. data/vendor/assets/javascripts/highstock/lib/svg2pdf.js +38 -0
  501. data/vendor/assets/javascripts/highstock/lib/svg2pdf.src.js +4390 -0
  502. data/vendor/assets/javascripts/highstock/modules/accessibility.js +73 -0
  503. data/vendor/assets/javascripts/highstock/modules/accessibility.js.map +1 -0
  504. data/vendor/assets/javascripts/highstock/modules/accessibility.src.js +3103 -0
  505. data/vendor/assets/javascripts/highstock/modules/annotations-advanced.js +132 -0
  506. data/vendor/assets/javascripts/highstock/modules/annotations-advanced.js.map +1 -0
  507. data/vendor/assets/javascripts/highstock/modules/annotations-advanced.src.js +8230 -0
  508. data/vendor/assets/javascripts/highstock/modules/annotations.js +94 -0
  509. data/vendor/assets/javascripts/highstock/modules/annotations.js.map +1 -0
  510. data/vendor/assets/javascripts/highstock/modules/annotations.src.js +6001 -0
  511. data/vendor/assets/javascripts/highstock/modules/arrow-symbols.js +11 -0
  512. data/vendor/assets/javascripts/highstock/modules/arrow-symbols.js.map +1 -0
  513. data/vendor/assets/javascripts/highstock/modules/arrow-symbols.src.js +225 -0
  514. data/vendor/assets/javascripts/highstock/modules/boost-canvas.js +23 -0
  515. data/vendor/assets/javascripts/highstock/modules/boost-canvas.js.map +1 -0
  516. data/vendor/assets/javascripts/highstock/modules/boost-canvas.src.js +756 -0
  517. data/vendor/assets/javascripts/highstock/modules/boost.js +65 -0
  518. data/vendor/assets/javascripts/highstock/modules/boost.js.map +1 -0
  519. data/vendor/assets/javascripts/highstock/modules/boost.src.js +3752 -0
  520. data/vendor/assets/javascripts/highstock/modules/bullet.js +14 -0
  521. data/vendor/assets/javascripts/highstock/modules/bullet.js.map +1 -0
  522. data/vendor/assets/javascripts/highstock/modules/bullet.src.js +388 -0
  523. data/vendor/assets/javascripts/highstock/modules/current-date-indicator.js +11 -0
  524. data/vendor/assets/javascripts/highstock/modules/current-date-indicator.js.map +1 -0
  525. data/vendor/assets/javascripts/highstock/modules/current-date-indicator.src.js +127 -0
  526. data/vendor/assets/javascripts/highstock/modules/cylinder.js +14 -0
  527. data/vendor/assets/javascripts/highstock/modules/cylinder.js.map +1 -0
  528. data/vendor/assets/javascripts/highstock/modules/cylinder.src.js +413 -0
  529. data/vendor/assets/javascripts/highstock/modules/data.js +37 -0
  530. data/vendor/assets/javascripts/highstock/modules/data.js.map +1 -0
  531. data/vendor/assets/javascripts/highstock/modules/data.src.js +2565 -0
  532. data/vendor/assets/javascripts/highstock/modules/datagrouping.js +25 -0
  533. data/vendor/assets/javascripts/highstock/modules/datagrouping.js.map +1 -0
  534. data/vendor/assets/javascripts/highstock/modules/datagrouping.src.js +1140 -0
  535. data/vendor/assets/javascripts/highstock/modules/debugger.js +28 -0
  536. data/vendor/assets/javascripts/highstock/modules/debugger.js.map +1 -0
  537. data/vendor/assets/javascripts/highstock/modules/debugger.src.js +267 -0
  538. data/vendor/assets/javascripts/highstock/modules/dependency-wheel.js +15 -0
  539. data/vendor/assets/javascripts/highstock/modules/dependency-wheel.js.map +1 -0
  540. data/vendor/assets/javascripts/highstock/modules/dependency-wheel.src.js +301 -0
  541. data/vendor/assets/javascripts/highstock/modules/drag-panes.js +18 -0
  542. data/vendor/assets/javascripts/highstock/modules/drag-panes.js.map +1 -0
  543. data/vendor/assets/javascripts/highstock/modules/drag-panes.src.js +649 -0
  544. data/vendor/assets/javascripts/highstock/modules/draggable-points.js +40 -0
  545. data/vendor/assets/javascripts/highstock/modules/draggable-points.js.map +1 -0
  546. data/vendor/assets/javascripts/highstock/modules/draggable-points.src.js +2650 -0
  547. data/vendor/assets/javascripts/highstock/modules/drilldown.js +29 -0
  548. data/vendor/assets/javascripts/highstock/modules/drilldown.js.map +1 -0
  549. data/vendor/assets/javascripts/highstock/modules/drilldown.src.js +1321 -0
  550. data/vendor/assets/javascripts/highstock/modules/export-data.js +27 -0
  551. data/vendor/assets/javascripts/highstock/modules/export-data.js.map +1 -0
  552. data/vendor/assets/javascripts/highstock/modules/export-data.src.js +1234 -0
  553. data/vendor/assets/javascripts/highstock/modules/exporting.js +35 -0
  554. data/vendor/assets/javascripts/highstock/modules/exporting.js.map +1 -0
  555. data/vendor/assets/javascripts/highstock/modules/exporting.src.js +2233 -0
  556. data/vendor/assets/javascripts/highstock/modules/full-screen.js +11 -0
  557. data/vendor/assets/javascripts/highstock/modules/full-screen.js.map +1 -0
  558. data/vendor/assets/javascripts/highstock/modules/full-screen.src.js +68 -0
  559. data/vendor/assets/javascripts/highstock/modules/funnel.js +14 -0
  560. data/vendor/assets/javascripts/highstock/modules/funnel.js.map +1 -0
  561. data/vendor/assets/javascripts/highstock/modules/funnel.src.js +576 -0
  562. data/vendor/assets/javascripts/highstock/modules/grid-axis.js +23 -0
  563. data/vendor/assets/javascripts/highstock/modules/grid-axis.js.map +1 -0
  564. data/vendor/assets/javascripts/highstock/modules/grid-axis.src.js +988 -0
  565. data/vendor/assets/javascripts/highstock/modules/heatmap.js +28 -0
  566. data/vendor/assets/javascripts/highstock/modules/heatmap.js.map +1 -0
  567. data/vendor/assets/javascripts/highstock/modules/heatmap.src.js +1731 -0
  568. data/vendor/assets/javascripts/highstock/modules/histogram-bellcurve.js +16 -0
  569. data/vendor/assets/javascripts/highstock/modules/histogram-bellcurve.js.map +1 -0
  570. data/vendor/assets/javascripts/highstock/modules/histogram-bellcurve.src.js +570 -0
  571. data/vendor/assets/javascripts/highstock/modules/item-series.js +13 -0
  572. data/vendor/assets/javascripts/highstock/modules/item-series.js.map +1 -0
  573. data/vendor/assets/javascripts/highstock/modules/item-series.src.js +176 -0
  574. data/vendor/assets/javascripts/highstock/modules/networkgraph.js +31 -0
  575. data/vendor/assets/javascripts/highstock/modules/networkgraph.js.map +1 -0
  576. data/vendor/assets/javascripts/highstock/modules/networkgraph.src.js +1348 -0
  577. data/vendor/assets/javascripts/highstock/modules/no-data-to-display.js +13 -0
  578. data/vendor/assets/javascripts/highstock/modules/no-data-to-display.js.map +1 -0
  579. data/vendor/assets/javascripts/highstock/modules/no-data-to-display.src.js +285 -0
  580. data/vendor/assets/javascripts/highstock/modules/offline-exporting.js +22 -0
  581. data/vendor/assets/javascripts/highstock/modules/offline-exporting.js.map +1 -0
  582. data/vendor/assets/javascripts/highstock/modules/offline-exporting.src.js +838 -0
  583. data/vendor/assets/javascripts/highstock/modules/oldie-polyfills.js +13 -0
  584. data/vendor/assets/javascripts/highstock/modules/oldie-polyfills.js.map +1 -0
  585. data/vendor/assets/javascripts/highstock/modules/oldie-polyfills.src.js +150 -0
  586. data/vendor/assets/javascripts/highstock/modules/oldie.js +35 -0
  587. data/vendor/assets/javascripts/highstock/modules/oldie.js.map +1 -0
  588. data/vendor/assets/javascripts/highstock/modules/oldie.src.js +1582 -0
  589. data/vendor/assets/javascripts/highstock/modules/overlapping-datalabels.js +9 -0
  590. data/vendor/assets/javascripts/highstock/modules/overlapping-datalabels.js.map +1 -0
  591. data/vendor/assets/javascripts/highstock/modules/overlapping-datalabels.src.js +22 -0
  592. data/vendor/assets/javascripts/highstock/modules/parallel-coordinates.js +18 -0
  593. data/vendor/assets/javascripts/highstock/modules/parallel-coordinates.js.map +1 -0
  594. data/vendor/assets/javascripts/highstock/modules/parallel-coordinates.src.js +517 -0
  595. data/vendor/assets/javascripts/highstock/modules/pareto.js +14 -0
  596. data/vendor/assets/javascripts/highstock/modules/pareto.js.map +1 -0
  597. data/vendor/assets/javascripts/highstock/modules/pareto.src.js +327 -0
  598. data/vendor/assets/javascripts/highstock/modules/pathfinder.js +34 -0
  599. data/vendor/assets/javascripts/highstock/modules/pathfinder.js.map +1 -0
  600. data/vendor/assets/javascripts/highstock/modules/pathfinder.src.js +2336 -0
  601. data/vendor/assets/javascripts/highstock/modules/pattern-fill.js +21 -0
  602. data/vendor/assets/javascripts/highstock/modules/pattern-fill.js.map +1 -0
  603. data/vendor/assets/javascripts/highstock/modules/pattern-fill.src.js +634 -0
  604. data/vendor/assets/javascripts/highstock/modules/price-indicator.js +13 -0
  605. data/vendor/assets/javascripts/highstock/modules/price-indicator.js.map +1 -0
  606. data/vendor/assets/javascripts/highstock/modules/price-indicator.src.js +176 -0
  607. data/vendor/assets/javascripts/highstock/modules/sankey.js +22 -0
  608. data/vendor/assets/javascripts/highstock/modules/sankey.js.map +1 -0
  609. data/vendor/assets/javascripts/highstock/modules/sankey.src.js +911 -0
  610. data/vendor/assets/javascripts/highstock/modules/series-label.js +23 -0
  611. data/vendor/assets/javascripts/highstock/modules/series-label.js.map +1 -0
  612. data/vendor/assets/javascripts/highstock/modules/series-label.src.js +1065 -0
  613. data/vendor/assets/javascripts/highstock/modules/solid-gauge.js +15 -0
  614. data/vendor/assets/javascripts/highstock/modules/solid-gauge.js.map +1 -0
  615. data/vendor/assets/javascripts/highstock/modules/solid-gauge.src.js +510 -0
  616. data/vendor/assets/javascripts/highstock/modules/sonification.js +53 -0
  617. data/vendor/assets/javascripts/highstock/modules/sonification.js.map +1 -0
  618. data/vendor/assets/javascripts/highstock/modules/sonification.src.js +3341 -0
  619. data/vendor/assets/javascripts/highstock/modules/static-scale.js +12 -0
  620. data/vendor/assets/javascripts/highstock/modules/static-scale.js.map +1 -0
  621. data/vendor/assets/javascripts/highstock/modules/static-scale.src.js +114 -0
  622. data/vendor/assets/javascripts/highstock/modules/stock-tools.js +65 -0
  623. data/vendor/assets/javascripts/highstock/modules/stock-tools.js.map +1 -0
  624. data/vendor/assets/javascripts/highstock/modules/stock-tools.src.js +3437 -0
  625. data/vendor/assets/javascripts/highstock/modules/stock.js +151 -0
  626. data/vendor/assets/javascripts/highstock/modules/stock.js.map +1 -0
  627. data/vendor/assets/javascripts/highstock/modules/stock.src.js +10907 -0
  628. data/vendor/assets/javascripts/highstock/modules/streamgraph.js +10 -0
  629. data/vendor/assets/javascripts/highstock/modules/streamgraph.js.map +1 -0
  630. data/vendor/assets/javascripts/highstock/modules/streamgraph.src.js +158 -0
  631. data/vendor/assets/javascripts/highstock/modules/sunburst.js +52 -0
  632. data/vendor/assets/javascripts/highstock/modules/sunburst.js.map +1 -0
  633. data/vendor/assets/javascripts/highstock/modules/sunburst.src.js +3174 -0
  634. data/vendor/assets/javascripts/highstock/modules/tilemap.js +26 -0
  635. data/vendor/assets/javascripts/highstock/modules/tilemap.js.map +1 -0
  636. data/vendor/assets/javascripts/highstock/modules/tilemap.src.js +1402 -0
  637. data/vendor/assets/javascripts/highstock/modules/timeline.js +23 -0
  638. data/vendor/assets/javascripts/highstock/modules/timeline.js.map +1 -0
  639. data/vendor/assets/javascripts/highstock/modules/timeline.src.js +778 -0
  640. data/vendor/assets/javascripts/highstock/modules/treegrid.js +50 -0
  641. data/vendor/assets/javascripts/highstock/modules/treegrid.js.map +1 -0
  642. data/vendor/assets/javascripts/highstock/modules/treegrid.src.js +2917 -0
  643. data/vendor/assets/javascripts/highstock/modules/treemap.js +39 -0
  644. data/vendor/assets/javascripts/highstock/modules/treemap.js.map +1 -0
  645. data/vendor/assets/javascripts/highstock/modules/treemap.src.js +2083 -0
  646. data/vendor/assets/javascripts/highstock/modules/variable-pie.js +16 -0
  647. data/vendor/assets/javascripts/highstock/modules/variable-pie.js.map +1 -0
  648. data/vendor/assets/javascripts/highstock/modules/variable-pie.src.js +485 -0
  649. data/vendor/assets/javascripts/highstock/modules/variwide.js +15 -0
  650. data/vendor/assets/javascripts/highstock/modules/variwide.js.map +1 -0
  651. data/vendor/assets/javascripts/highstock/modules/variwide.src.js +376 -0
  652. data/vendor/assets/javascripts/highstock/modules/vector.js +13 -0
  653. data/vendor/assets/javascripts/highstock/modules/vector.js.map +1 -0
  654. data/vendor/assets/javascripts/highstock/modules/vector.src.js +381 -0
  655. data/vendor/assets/javascripts/highstock/modules/venn.js +30 -0
  656. data/vendor/assets/javascripts/highstock/modules/venn.js.map +1 -0
  657. data/vendor/assets/javascripts/highstock/modules/venn.src.js +1624 -0
  658. data/vendor/assets/javascripts/highstock/modules/windbarb.js +17 -0
  659. data/vendor/assets/javascripts/highstock/modules/windbarb.js.map +1 -0
  660. data/vendor/assets/javascripts/highstock/modules/windbarb.src.js +574 -0
  661. data/vendor/assets/javascripts/highstock/modules/wordcloud.js +25 -0
  662. data/vendor/assets/javascripts/highstock/modules/wordcloud.js.map +1 -0
  663. data/vendor/assets/javascripts/highstock/modules/wordcloud.src.js +1475 -0
  664. data/vendor/assets/javascripts/highstock/modules/xrange.js +20 -0
  665. data/vendor/assets/javascripts/highstock/modules/xrange.js.map +1 -0
  666. data/vendor/assets/javascripts/highstock/modules/xrange.src.js +788 -0
  667. data/vendor/assets/javascripts/highstock/themes/avocado.js +9 -0
  668. data/vendor/assets/javascripts/highstock/themes/avocado.js.map +1 -0
  669. data/vendor/assets/javascripts/highstock/themes/avocado.src.js +63 -0
  670. data/vendor/assets/javascripts/highstock/themes/dark-blue.js +15 -0
  671. data/vendor/assets/javascripts/highstock/themes/dark-blue.js.map +1 -0
  672. data/vendor/assets/javascripts/highstock/themes/dark-blue.src.js +285 -0
  673. data/vendor/assets/javascripts/highstock/themes/dark-green.js +15 -0
  674. data/vendor/assets/javascripts/highstock/themes/dark-green.js.map +1 -0
  675. data/vendor/assets/javascripts/highstock/themes/dark-green.src.js +287 -0
  676. data/vendor/assets/javascripts/highstock/themes/dark-unica.js +14 -0
  677. data/vendor/assets/javascripts/highstock/themes/dark-unica.js.map +1 -0
  678. data/vendor/assets/javascripts/highstock/themes/dark-unica.src.js +246 -0
  679. data/vendor/assets/javascripts/highstock/themes/gray.js +15 -0
  680. data/vendor/assets/javascripts/highstock/themes/gray.js.map +1 -0
  681. data/vendor/assets/javascripts/highstock/themes/gray.src.js +293 -0
  682. data/vendor/assets/javascripts/highstock/themes/grid-light.js +11 -0
  683. data/vendor/assets/javascripts/highstock/themes/grid-light.js.map +1 -0
  684. data/vendor/assets/javascripts/highstock/themes/grid-light.src.js +107 -0
  685. data/vendor/assets/javascripts/highstock/themes/grid.js +11 -0
  686. data/vendor/assets/javascripts/highstock/themes/grid.js.map +1 -0
  687. data/vendor/assets/javascripts/highstock/themes/grid.src.js +136 -0
  688. data/vendor/assets/javascripts/highstock/themes/sand-signika.js +11 -0
  689. data/vendor/assets/javascripts/highstock/themes/sand-signika.js.map +1 -0
  690. data/vendor/assets/javascripts/highstock/themes/sand-signika.src.js +137 -0
  691. data/vendor/assets/javascripts/highstock/themes/skies.js +11 -0
  692. data/vendor/assets/javascripts/highstock/themes/skies.js.map +1 -0
  693. data/vendor/assets/javascripts/highstock/themes/skies.src.js +126 -0
  694. data/vendor/assets/javascripts/highstock/themes/sunset.js +9 -0
  695. data/vendor/assets/javascripts/highstock/themes/sunset.js.map +1 -0
  696. data/vendor/assets/javascripts/highstock/themes/sunset.src.js +62 -0
  697. metadata +781 -0
@@ -0,0 +1,14 @@
1
+ /*
2
+ Highcharts JS v7.0.3 (2019-02-06)
3
+
4
+ Pareto series type for Highcharts
5
+
6
+ (c) 2010-2019 Sebastian Bochan
7
+
8
+ License: www.highcharts.com/license
9
+ */
10
+ (function(a){"object"===typeof module&&module.exports?(a["default"]=a,module.exports=a):"function"===typeof define&&define.amd?define(function(){return a}):a("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(a){var e=function(f){var a=f.Series,d=f.addEvent;return{init:function(){a.prototype.init.apply(this,arguments);this.initialised=!1;this.baseSeries=null;this.eventRemovers=[];this.addEvents()},setDerivedData:f.noop,setBaseSeries:function(){var b=this.chart,c=this.options.baseSeries;
11
+ this.baseSeries=c&&(b.series[c]||b.get(c))||null},addEvents:function(){var b=this,c;c=d(this.chart,"afterLinkSeries",function(){b.setBaseSeries();b.baseSeries&&!b.initialised&&(b.setDerivedData(),b.addBaseSeriesEvents(),b.initialised=!0)});this.eventRemovers.push(c)},addBaseSeriesEvents:function(){var b=this,c,a;c=d(b.baseSeries,"updatedData",function(){b.setDerivedData()});a=d(b.baseSeries,"destroy",function(){b.baseSeries=null;b.initialised=!1});b.eventRemovers.push(c,a)},destroy:function(){this.eventRemovers.forEach(function(b){b()});
12
+ a.prototype.destroy.apply(this,arguments)}}}(a);(function(a,e){var d=a.correctFloat,b=a.seriesType;a=a.merge;b("pareto","line",{zIndex:3},a(e,{setDerivedData:function(){if(1<this.baseSeries.yData.length){var a=this.baseSeries.xData,b=this.baseSeries.yData,d=this.sumPointsPercents(b,a,null,!0);this.setData(this.sumPointsPercents(b,a,d,!1),!1)}},sumPointsPercents:function(a,b,f,e){var c=0,h=0,k=[],g;a.forEach(function(a,l){null!==a&&(e?c+=a:(g=a/f*100,k.push([b[l],d(h+g)]),h+=g))});return e?c:k}}))})(a,
13
+ e)});
14
+ //# sourceMappingURL=pareto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pareto.js.map","lineCount":13,"mappings":"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","sources":["pareto.src.js"],"names":["factory","module","exports","define","amd","Highcharts","undefined","derivedSeriesMixin","H","Series","addEvent","init","prototype","apply","arguments","initialised","baseSeries","eventRemovers","addEvents","setDerivedData","noop","setBaseSeries","chart","baseSeriesOptions","options","series","get","derivedSeries","chartSeriesLinked","addBaseSeriesEvents","push","updatedDataRemover","destroyRemover","destroy","forEach","remover","correctFloat","seriesType","merge","zIndex","yData","length","xValues","xData","yValues","sum","sumPointsPercents","setData","isSum","sumY","sumPercent","percentPoints","percentPoint","point","i"]}
@@ -0,0 +1,327 @@
1
+ /**
2
+ * @license Highcharts JS v7.0.3 (2019-02-06)
3
+ *
4
+ * Pareto series type for Highcharts
5
+ *
6
+ * (c) 2010-2019 Sebastian Bochan
7
+ *
8
+ * License: www.highcharts.com/license
9
+ */
10
+ 'use strict';
11
+ (function (factory) {
12
+ if (typeof module === 'object' && module.exports) {
13
+ factory['default'] = factory;
14
+ module.exports = factory;
15
+ } else if (typeof define === 'function' && define.amd) {
16
+ define(function () {
17
+ return factory;
18
+ });
19
+ } else {
20
+ factory(typeof Highcharts !== 'undefined' ? Highcharts : undefined);
21
+ }
22
+ }(function (Highcharts) {
23
+ var derivedSeriesMixin = (function (H) {
24
+
25
+
26
+ var Series = H.Series,
27
+ addEvent = H.addEvent,
28
+ noop = H.noop;
29
+
30
+
31
+ /* ************************************************************************** *
32
+ *
33
+ * DERIVED SERIES MIXIN
34
+ *
35
+ * ************************************************************************** */
36
+
37
+ /**
38
+ * Provides methods for auto setting/updating series data based on the based
39
+ * series data.
40
+ *
41
+ * @private
42
+ * @mixin derivedSeriesMixin
43
+ */
44
+ var derivedSeriesMixin = {
45
+ /**
46
+ * Initialise series
47
+ *
48
+ * @private
49
+ * @function derivedSeriesMixin.init
50
+ */
51
+ init: function () {
52
+ Series.prototype.init.apply(this, arguments);
53
+
54
+ this.initialised = false;
55
+ this.baseSeries = null;
56
+ this.eventRemovers = [];
57
+
58
+ this.addEvents();
59
+ },
60
+
61
+ /**
62
+ * Method to be implemented - inside the method the series has already
63
+ * access to the base series via m `this.baseSeries` and the bases data is
64
+ * initialised. It should return data in the format accepted by
65
+ * `Series.setData()` method
66
+ *
67
+ * @private
68
+ * @function derivedSeriesMixin.setDerivedData
69
+ *
70
+ * @return {Array<*>}
71
+ * An array of data
72
+ */
73
+ setDerivedData: noop,
74
+
75
+ /**
76
+ * Sets base series for the series
77
+ *
78
+ * @private
79
+ * @function derivedSeriesMixin.setBaseSeries
80
+ */
81
+ setBaseSeries: function () {
82
+ var chart = this.chart,
83
+ baseSeriesOptions = this.options.baseSeries,
84
+ baseSeries =
85
+ baseSeriesOptions &&
86
+ (chart.series[baseSeriesOptions] || chart.get(baseSeriesOptions));
87
+
88
+ this.baseSeries = baseSeries || null;
89
+ },
90
+
91
+ /**
92
+ * Adds events for the series
93
+ *
94
+ * @private
95
+ * @function derivedSeriesMixin.addEvents
96
+ */
97
+ addEvents: function () {
98
+ var derivedSeries = this,
99
+ chartSeriesLinked;
100
+
101
+ chartSeriesLinked = addEvent(
102
+ this.chart,
103
+ 'afterLinkSeries',
104
+ function () {
105
+ derivedSeries.setBaseSeries();
106
+
107
+ if (derivedSeries.baseSeries && !derivedSeries.initialised) {
108
+ derivedSeries.setDerivedData();
109
+ derivedSeries.addBaseSeriesEvents();
110
+ derivedSeries.initialised = true;
111
+ }
112
+ }
113
+ );
114
+
115
+ this.eventRemovers.push(
116
+ chartSeriesLinked
117
+ );
118
+ },
119
+
120
+ /**
121
+ * Adds events to the base series - it required for recalculating the data
122
+ * in the series if the base series is updated / removed / etc.
123
+ *
124
+ * @private
125
+ * @function derivedSeriesMixin.addBaseSeriesEvents
126
+ */
127
+ addBaseSeriesEvents: function () {
128
+ var derivedSeries = this,
129
+ updatedDataRemover,
130
+ destroyRemover;
131
+
132
+ updatedDataRemover = addEvent(
133
+ derivedSeries.baseSeries,
134
+ 'updatedData',
135
+ function () {
136
+ derivedSeries.setDerivedData();
137
+ }
138
+ );
139
+
140
+ destroyRemover = addEvent(
141
+ derivedSeries.baseSeries,
142
+ 'destroy',
143
+ function () {
144
+ derivedSeries.baseSeries = null;
145
+ derivedSeries.initialised = false;
146
+ }
147
+ );
148
+
149
+ derivedSeries.eventRemovers.push(
150
+ updatedDataRemover,
151
+ destroyRemover
152
+ );
153
+ },
154
+
155
+ /**
156
+ * Destroys the series
157
+ *
158
+ * @private
159
+ * @function derivedSeriesMixin.destroy
160
+ */
161
+ destroy: function () {
162
+ this.eventRemovers.forEach(function (remover) {
163
+ remover();
164
+ });
165
+
166
+ Series.prototype.destroy.apply(this, arguments);
167
+ }
168
+ };
169
+
170
+
171
+ return derivedSeriesMixin;
172
+ }(Highcharts));
173
+ (function (H, derivedSeriesMixin) {
174
+ /* *
175
+ * (c) 2010-2017 Sebastian Bochan
176
+ *
177
+ * License: www.highcharts.com/license
178
+ */
179
+
180
+
181
+
182
+ var correctFloat = H.correctFloat,
183
+ seriesType = H.seriesType,
184
+ merge = H.merge;
185
+
186
+
187
+ /**
188
+ * The pareto series type.
189
+ *
190
+ * @private
191
+ * @class
192
+ * @name Highcharts.seriesTypes.pareto
193
+ *
194
+ * @augments Highcharts.Series
195
+ */
196
+ seriesType('pareto', 'line'
197
+
198
+ /**
199
+ * A pareto diagram is a type of chart that contains both bars and a line graph,
200
+ * where individual values are represented in descending order by bars, and the
201
+ * cumulative total is represented by the line.
202
+ *
203
+ * @sample {highcharts} highcharts/demo/pareto/
204
+ * Pareto diagram
205
+ *
206
+ * @extends plotOptions.line
207
+ * @since 6.0.0
208
+ * @product highcharts
209
+ * @excluding allAreas, boostThreshold, borderColor, borderRadius,
210
+ * borderWidth, crisp, colorAxis, depth, data, edgeColor,
211
+ * edgeWidth, findNearestPointBy, gapSize, gapUnit, grouping,
212
+ * groupPadding, groupZPadding, maxPointWidth, keys,
213
+ * negativeColor, pointInterval, pointIntervalUnit, pointPadding,
214
+ * pointPlacement, pointRange, pointStart, pointWidth, shadow,
215
+ * step, softThreshold, stacking, threshold, zoneAxis, zones
216
+ * @optionparent plotOptions.pareto
217
+ */
218
+ , {
219
+ /**
220
+ * Higher zIndex than column series to draw line above shapes.
221
+ */
222
+ zIndex: 3
223
+ }, merge(derivedSeriesMixin, {
224
+ /**
225
+ * Calculate sum and return percent points.
226
+ *
227
+ * @private
228
+ * @function Highcharts.Series#setDerivedData
229
+ *
230
+ * @return {Array<Array<number,number>>}
231
+ * Returns array of points [x,y]
232
+ */
233
+ setDerivedData: function () {
234
+ if (this.baseSeries.yData.length > 1) {
235
+ var xValues = this.baseSeries.xData,
236
+ yValues = this.baseSeries.yData,
237
+ sum = this.sumPointsPercents(yValues, xValues, null, true);
238
+
239
+ this.setData(
240
+ this.sumPointsPercents(yValues, xValues, sum, false),
241
+ false
242
+ );
243
+ }
244
+ },
245
+ /**
246
+ * Calculate y sum and each percent point.
247
+ *
248
+ * @private
249
+ * @function Highcharts.Series#sumPointsPercents
250
+ *
251
+ * @param {Array<number>} yValues
252
+ * Y values
253
+ *
254
+ * @param {Array<number>} xValues
255
+ * X values
256
+ *
257
+ * @param {number} sum
258
+ * Sum of all y values
259
+ *
260
+ * @param {boolean} [isSum]
261
+ * Declares if calculate sum of all points
262
+ *
263
+ * @return {number|Array<number,number>}
264
+ * Returns sum of points or array of points [x,sum]
265
+ */
266
+ sumPointsPercents: function (yValues, xValues, sum, isSum) {
267
+ var sumY = 0,
268
+ sumPercent = 0,
269
+ percentPoints = [],
270
+ percentPoint;
271
+
272
+ yValues.forEach(function (point, i) {
273
+ if (point !== null) {
274
+ if (isSum) {
275
+ sumY += point;
276
+ } else {
277
+ percentPoint = (point / sum) * 100;
278
+ percentPoints.push([
279
+ xValues[i],
280
+ correctFloat(sumPercent + percentPoint)
281
+ ]);
282
+ sumPercent += percentPoint;
283
+ }
284
+ }
285
+ });
286
+
287
+ return isSum ? sumY : percentPoints;
288
+ }
289
+ }));
290
+
291
+ /**
292
+ * A `pareto` series. If the [type](#series.pareto.type) option is not
293
+ * specified, it is inherited from [chart.type](#chart.type).
294
+ *
295
+ * @extends series,plotOptions.pareto
296
+ * @since 6.0.0
297
+ * @product highcharts
298
+ * @excluding data, dataParser, dataURL
299
+ * @apioption series.pareto
300
+ */
301
+
302
+ /**
303
+ * An integer identifying the index to use for the base series, or a string
304
+ * representing the id of the series.
305
+ *
306
+ * @type {number|string}
307
+ * @default undefined
308
+ * @apioption series.pareto.baseSeries
309
+ */
310
+
311
+ /**
312
+ * An array of data points for the series. For the `pareto` series type,
313
+ * points are calculated dynamically.
314
+ *
315
+ * @type {Array<Array<number|string>|*>}
316
+ * @extends series.column.data
317
+ * @since 6.0.0
318
+ * @product highcharts
319
+ * @apioption series.pareto.data
320
+ */
321
+
322
+ }(Highcharts, derivedSeriesMixin));
323
+ return (function () {
324
+
325
+
326
+ }());
327
+ }));
@@ -0,0 +1,34 @@
1
+ /*
2
+ Highcharts JS v7.0.3 (2019-02-06)
3
+ Pathfinder
4
+
5
+ (c) 2016-2019 ystein Moseng
6
+
7
+ License: www.highcharts.com/license
8
+ */
9
+ (function(m){"object"===typeof module&&module.exports?(m["default"]=m,module.exports=m):"function"===typeof define&&define.amd?define(function(){return m}):m("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(m){var H=function(h){function w(e,c,g){g=g||0;var h=e.length-1;c-=1e-7;for(var l,p;g<=h;)if(l=h+g>>1,p=c-e[l].xMin,0<p)g=l+1;else if(0>p)h=l-1;else return l;return 0<g?g-1:0}function l(e,c){for(var g=w(e,c.x+1)+1;g--;){var h;if(h=e[g].xMax>=c.x)h=e[g],h=c.x<=h.xMax&&c.x>=h.xMin&&c.y<=
10
+ h.yMax&&c.y>=h.yMin;if(h)return g}return-1}function x(e){var c=[];if(e.length){c.push("M",e[0].start.x,e[0].start.y);for(var g=0;g<e.length;++g)c.push("L",e[g].end.x,e[g].end.y)}return c}function q(e,c){e.yMin=m(e.yMin,c.yMin);e.yMax=u(e.yMax,c.yMax);e.xMin=m(e.xMin,c.xMin);e.xMax=u(e.xMax,c.xMax)}var u=Math.min,m=Math.max,r=Math.abs,z=h.pick;return{straight:function(e,c){return{path:["M",e.x,e.y,"L",c.x,c.y],obstacles:[{start:e,end:c}]}},simpleConnect:h.extend(function(e,c,g){function h(b,a,d,f,
11
+ k){b={x:b.x,y:b.y};b[a]=d[f||a]+(k||0);return b}function w(b,a,d){var f=r(a[d]-b[d+"Min"])>r(a[d]-b[d+"Max"]);return h(a,d,b,d+(f?"Max":"Min"),f?1:-1)}var p=[],a,b=z(g.startDirectionX,r(c.x-e.x)>r(c.y-e.y))?"x":"y",d=g.chartObstacles,k=l(d,e);g=l(d,c);var f;-1<g?(a=d[g],g=w(a,c,b),a={start:g,end:c},f=g):f=c;-1<k&&(d=d[k],g=w(d,e,b),p.push({start:e,end:g}),g[b]>e[b]===g[b]>f[b]&&(b="y"===b?"x":"y",c=e[b]<c[b],p.push({start:g,end:h(g,b,d,b+(c?"Max":"Min"),c?1:-1)}),b="y"===b?"x":"y"));e=p.length?p[p.length-
12
+ 1].end:e;g=h(e,b,f);p.push({start:e,end:g});b=h(g,"y"===b?"x":"y",f);p.push({start:g,end:b});p.push(a);return{path:x(p),obstacles:p}},{requiresObstacles:!0}),fastAvoid:h.extend(function(e,c,g){function h(b,a,d){var f,k,e,g,c,h=b.x<a.x?1:-1;b.x<a.x?(f=b,k=a):(f=a,k=b);b.y<a.y?(g=b,e=a):(g=a,e=b);for(c=0>h?u(w(n,k.x),n.length-1):0;n[c]&&(0<h&&n[c].xMin<=k.x||0>h&&n[c].xMax>=f.x);){if(n[c].xMin<=k.x&&n[c].xMax>=f.x&&n[c].yMin<=e.y&&n[c].yMax>=g.y)return d?{y:b.y,x:b.x<a.x?n[c].xMin-1:n[c].xMax+1,obstacle:n[c]}:
13
+ {x:b.x,y:b.y<a.y?n[c].yMin-1:n[c].yMax+1,obstacle:n[c]};c+=h}return a}function y(b,a,d,f,k){var c=k.soft,e=k.hard,g=f?"x":"y",v={x:a.x,y:a.y},t={x:a.x,y:a.y};k=b[g+"Max"]>=c[g+"Max"];var c=b[g+"Min"]<=c[g+"Min"],E=b[g+"Max"]>=e[g+"Max"],e=b[g+"Min"]<=e[g+"Min"],n=r(b[g+"Min"]-a[g]),l=r(b[g+"Max"]-a[g]);d=10>r(n-l)?a[g]<d[g]:l<n;t[g]=b[g+"Min"];v[g]=b[g+"Max"];b=h(a,t,f)[g]!==t[g];a=h(a,v,f)[g]!==v[g];d=b?a?d:!0:a?!1:d;d=c?k?d:!0:k?!1:d;return e?E?d:!0:E?!1:d}function p(b,a,d){if(b.x===a.x&&b.y===
14
+ a.y)return[];var f=d?"x":"y",k,c,e,v,t=g.obstacleOptions.margin;k={soft:{xMin:C,xMax:D,yMin:F,yMax:G},hard:g.hardBounds};c=l(n,b);-1<c?(c=n[c],k=y(c,b,a,d,k),q(c,g.hardBounds),v=d?{y:b.y,x:c[k?"xMax":"xMin"]+(k?1:-1)}:{x:b.x,y:c[k?"yMax":"yMin"]+(k?1:-1)},e=l(n,v),-1<e&&(e=n[e],q(e,g.hardBounds),v[f]=k?m(c[f+"Max"]-t+1,(e[f+"Min"]+c[f+"Max"])/2):u(c[f+"Min"]+t-1,(e[f+"Max"]+c[f+"Min"])/2),b.x===v.x&&b.y===v.y?(A&&(v[f]=k?m(c[f+"Max"],e[f+"Max"])+1:u(c[f+"Min"],e[f+"Min"])-1),A=!A):A=!1),b=[{start:b,
15
+ end:v}]):(f=h(b,{x:d?a.x:b.x,y:d?b.y:a.y},d),b=[{start:b,end:{x:f.x,y:f.y}}],f[d?"x":"y"]!==a[d?"x":"y"]&&(k=y(f.obstacle,f,a,!d,k),q(f.obstacle,g.hardBounds),k={x:d?f.x:f.obstacle[k?"xMax":"xMin"]+(k?1:-1),y:d?f.obstacle[k?"yMax":"yMin"]+(k?1:-1):f.y},d=!d,b=b.concat(p({x:f.x,y:f.y},k,d))));return b=b.concat(p(b[b.length-1].end,a,!d))}function a(b,a,d){var f=u(b.xMax-a.x,a.x-b.xMin)<u(b.yMax-a.y,a.y-b.yMin);d=y(b,a,d,f,{soft:g.hardBounds,hard:g.hardBounds});return f?{y:a.y,x:b[d?"xMax":"xMin"]+(d?
16
+ 1:-1)}:{x:a.x,y:b[d?"yMax":"yMin"]+(d?1:-1)}}var b=z(g.startDirectionX,r(c.x-e.x)>r(c.y-e.y)),d=b?"x":"y",k,f,v=[],A=!1,t=g.obstacleMetrics,C=u(e.x,c.x)-t.maxWidth-10,D=m(e.x,c.x)+t.maxWidth+10,F=u(e.y,c.y)-t.maxHeight-10,G=m(e.y,c.y)+t.maxHeight+10,n=g.chartObstacles;k=w(n,C);t=w(n,D);n=n.slice(k,t+1);-1<(t=l(n,c))&&(f=a(n[t],c,e),v.push({end:c,start:f}),c=f);for(;-1<(t=l(n,c));)k=0>c[d]-e[d],f={x:c.x,y:c.y},f[d]=n[t][k?d+"Max":d+"Min"]+(k?1:-1),v.push({end:c,start:f}),c=f;e=p(e,c,b);e=e.concat(v.reverse());
17
+ return{path:x(e),obstacles:e}},{requiresObstacles:!0})}}(m);(function(h){h.SVGRenderer.prototype.symbols.arrow=function(h,l,m,q){return["M",h,l+q/2,"L",h+m,l,"L",h,l+q/2,"L",h+m,l+q]};h.SVGRenderer.prototype.symbols["arrow-half"]=function(m,l,x,q){return h.SVGRenderer.prototype.symbols.arrow(m,l,x/2,q)};h.SVGRenderer.prototype.symbols["triangle-left"]=function(h,l,m,q){return["M",h+m,l,"L",h,l+q/2,"L",h+m,l+q,"Z"]};h.SVGRenderer.prototype.symbols["arrow-filled"]=h.SVGRenderer.prototype.symbols["triangle-left"];
18
+ h.SVGRenderer.prototype.symbols["triangle-left-half"]=function(m,l,x,q){return h.SVGRenderer.prototype.symbols["triangle-left"](m,l,x/2,q)};h.SVGRenderer.prototype.symbols["arrow-filled-half"]=h.SVGRenderer.prototype.symbols["triangle-left-half"]})(m);(function(h,m){function l(a){var b=a.shapeArgs;return b?{xMin:b.x,xMax:b.x+b.width,yMin:b.y,yMax:b.y+b.height}:(b=a.graphic&&a.graphic.getBBox())?{xMin:a.plotX-b.width/2,xMax:a.plotX+b.width/2,yMin:a.plotY-b.height/2,yMax:a.plotY+b.height/2}:null}function x(a){for(var b=
19
+ a.length,d=0,k,f,c=[],g=function(b,a,d){d=B(d,10);var f=b.yMax+d>a.yMin-d&&b.yMin-d<a.yMax+d,k=b.xMax+d>a.xMin-d&&b.xMin-d<a.xMax+d,c=f?b.xMin>a.xMax?b.xMin-a.xMax:a.xMin-b.xMax:Infinity,e=k?b.yMin>a.yMax?b.yMin-a.yMax:a.yMin-b.yMax:Infinity;return k&&f?d?g(b,a,Math.floor(d/2)):Infinity:p(c,e)};d<b;++d)for(k=d+1;k<b;++k)f=g(a[d],a[k]),80>f&&c.push(f);c.push(80);return y(Math.floor(c.sort(function(b,a){return b-a})[Math.floor(c.length/10)]/2-1),1)}function q(a,b,d){this.init(a,b,d)}function u(a){this.init(a)}
20
+ function w(a){if(a.options.pathfinder||a.series.reduce(function(b,a){a.options&&g(!0,a.options.connectors=a.options.connectors||{},a.options.pathfinder);return b||a.options&&a.options.pathfinder},!1))g(!0,a.options.connectors=a.options.connectors||{},a.options.pathfinder),h.error('WARNING: Pathfinder options have been renamed. Use "chart.connectors" or "series.connectors" instead.')}var r=h.defined,z=h.deg2rad,e=h.extend,c=h.addEvent,g=h.merge,B=h.pick,y=Math.max,p=Math.min;e(h.defaultOptions,{connectors:{type:"straight",
21
+ lineWidth:1,marker:{enabled:!1,align:"center",verticalAlign:"middle",inside:!1,lineWidth:1},startMarker:{symbol:"diamond"},endMarker:{symbol:"arrow-filled"}}});q.prototype={init:function(a,b,d){this.fromPoint=a;this.toPoint=b;this.options=d;this.chart=a.series.chart;this.pathfinder=this.chart.pathfinder},renderPath:function(a,b,d){var k=this.chart,f=k.styledMode,c=k.pathfinder,g=!k.options.chart.forExport&&!1!==d,e=this.graphics&&this.graphics.path;c.group||(c.group=k.renderer.g().addClass("highcharts-pathfinder-group").attr({zIndex:-1}).add(k.seriesGroup));
22
+ c.group.translate(k.plotLeft,k.plotTop);e&&e.renderer||(e=k.renderer.path().add(c.group),f||e.attr({opacity:0}));e.attr(b);a={d:a};f||(a.opacity=1);e[g?"animate":"attr"](a,d);this.graphics=this.graphics||{};this.graphics.path=e},addMarker:function(a,b,d){var c=this.fromPoint.series.chart,f=c.pathfinder,c=c.renderer,g="start"===a?this.fromPoint:this.toPoint,e=g.getPathfinderAnchorPoint(b),h,l;b.enabled&&(d="start"===a?{x:d[4],y:d[5]}:{x:d[d.length-5],y:d[d.length-4]},d=g.getRadiansToVector(d,e),e=
23
+ g.getMarkerVector(d,b.radius,e),d=-d/z,b.width&&b.height?(h=b.width,l=b.height):h=l=2*b.radius,this.graphics=this.graphics||{},e={x:e.x-h/2,y:e.y-l/2,width:h,height:l,rotation:d,rotationOriginX:e.x,rotationOriginY:e.y},this.graphics[a]?this.graphics[a].animate(e):(this.graphics[a]=c.symbol(b.symbol).addClass("highcharts-point-connecting-path-"+a+"-marker").attr(e).add(f.group),c.styledMode||this.graphics[a].attr({fill:b.color||this.fromPoint.color,stroke:b.lineColor,"stroke-width":b.lineWidth,opacity:0}).animate({opacity:1},
24
+ g.series.options.animation)))},getPath:function(a){var b=this.pathfinder,d=this.chart,c=b.algorithms[a.type],f=b.chartObstacles;if("function"!==typeof c)h.error('"'+a.type+'" is not a Pathfinder algorithm.');else return c.requiresObstacles&&!f&&(f=b.chartObstacles=b.getChartObstacles(a),d.options.connectors.algorithmMargin=a.algorithmMargin,b.chartObstacleMetrics=b.getObstacleMetrics(f)),c(this.fromPoint.getPathfinderAnchorPoint(a.startMarker),this.toPoint.getPathfinderAnchorPoint(a.endMarker),g({chartObstacles:f,
25
+ lineObstacles:b.lineObstacles||[],obstacleMetrics:b.chartObstacleMetrics,hardBounds:{xMin:0,xMax:d.plotWidth,yMin:0,yMax:d.plotHeight},obstacleOptions:{margin:a.algorithmMargin},startDirectionX:b.getAlgorithmStartDirection(a.startMarker)},a))},render:function(){var a=this.fromPoint,b=a.series,d=b.chart,c=d.pathfinder,f=g(d.options.connectors,b.options.connectors,a.options.connectors,this.options),e={};d.styledMode||(e.stroke=f.lineColor||a.color,e["stroke-width"]=f.lineWidth,f.dashStyle&&(e.dashstyle=
26
+ f.dashStyle));e.class="highcharts-point-connecting-path highcharts-color-"+a.colorIndex;f=g(e,f);r(f.marker.radius)||(f.marker.radius=p(y(Math.ceil((f.algorithmMargin||8)/2)-1,1),5));a=this.getPath(f);d=a.path;a.obstacles&&(c.lineObstacles=c.lineObstacles||[],c.lineObstacles=c.lineObstacles.concat(a.obstacles));this.renderPath(d,e,b.options.animation);this.addMarker("start",g(f.marker,f.startMarker),d);this.addMarker("end",g(f.marker,f.endMarker),d)},destroy:function(){this.graphics&&(h.objectEach(this.graphics,
27
+ function(a){a.destroy()}),delete this.graphics)}};u.prototype={algorithms:m,init:function(a){this.chart=a;this.connections=[];c(a,"redraw",function(){this.pathfinder.update()})},update:function(a){var b=this.chart,d=this,c=d.connections;d.connections=[];b.series.forEach(function(a){a.visible&&a.points.forEach(function(a){var c,f=a.options&&a.options.connect&&h.splat(a.options.connect);a.visible&&!1!==a.isInside&&f&&f.forEach(function(f){c=b.get("string"===typeof f?f:f.to);c instanceof h.Point&&c.series.visible&&
28
+ c.visible&&!1!==c.isInside&&d.connections.push(new q(a,c,"string"===typeof f?{}:f))})})});for(var f=0,e,g,l=c.length,m=d.connections.length;f<l;++f){g=!1;for(e=0;e<m;++e)if(c[f].fromPoint===d.connections[e].fromPoint&&c[f].toPoint===d.connections[e].toPoint){d.connections[e].graphics=c[f].graphics;g=!0;break}g||c[f].destroy()}delete this.chartObstacles;delete this.lineObstacles;d.renderConnections(a)},renderConnections:function(a){a?this.chart.series.forEach(function(b){var a=function(){var a=b.chart.pathfinder;
29
+ (a&&a.connections||[]).forEach(function(a){a.fromPoint&&a.fromPoint.series===b&&a.render()});b.pathfinderRemoveRenderEvent&&(b.pathfinderRemoveRenderEvent(),delete b.pathfinderRemoveRenderEvent)};!1===b.options.animation?a():b.pathfinderRemoveRenderEvent=c(b,"afterAnimate",a)}):this.connections.forEach(function(a){a.render()})},getChartObstacles:function(a){for(var b=[],d=this.chart.series,c=B(a.algorithmMargin,0),f,e=0,g=d.length;e<g;++e)if(d[e].visible)for(var h=0,m=d[e].points.length,p;h<m;++h)p=
30
+ d[e].points[h],p.visible&&(p=l(p))&&b.push({xMin:p.xMin-c,xMax:p.xMax+c,yMin:p.yMin-c,yMax:p.yMax+c});b=b.sort(function(a,b){return a.xMin-b.xMin});r(a.algorithmMargin)||(f=a.algorithmMargin=x(b),b.forEach(function(a){a.xMin-=f;a.xMax+=f;a.yMin-=f;a.yMax+=f}));return b},getObstacleMetrics:function(a){for(var b=0,d=0,c,f,e=a.length;e--;)c=a[e].xMax-a[e].xMin,f=a[e].yMax-a[e].yMin,b<c&&(b=c),d<f&&(d=f);return{maxHeight:d,maxWidth:b}},getAlgorithmStartDirection:function(a){var b="top"!==a.verticalAlign&&
31
+ "bottom"!==a.verticalAlign;return"left"!==a.align&&"right"!==a.align?b?void 0:!1:b?!0:void 0}};h.Connection=q;h.Pathfinder=u;e(h.Point.prototype,{getPathfinderAnchorPoint:function(a){var b=l(this),c,e;switch(a.align){case "right":c="xMax";break;case "left":c="xMin"}switch(a.verticalAlign){case "top":e="yMin";break;case "bottom":e="yMax"}return{x:c?b[c]:(b.xMin+b.xMax)/2,y:e?b[e]:(b.yMin+b.yMax)/2}},getRadiansToVector:function(a,b){r(b)||(b=l(this),b={x:(b.xMin+b.xMax)/2,y:(b.yMin+b.yMax)/2});return Math.atan2(b.y-
32
+ a.y,a.x-b.x)},getMarkerVector:function(a,b,c){for(var e=2*Math.PI,d=l(this),g=d.xMax-d.xMin,h=d.yMax-d.yMin,m=Math.atan2(h,g),p=!1,g=g/2,q=h/2,u=d.xMin+g,d=d.yMin+q,r=u,n=d,w={},x=1,y=1;a<-Math.PI;)a+=e;for(;a>Math.PI;)a-=e;e=Math.tan(a);a>-m&&a<=m?(y=-1,p=!0):a>m&&a<=Math.PI-m?y=-1:a>Math.PI-m||a<=-(Math.PI-m)?(x=-1,p=!0):x=-1;p?(r+=x*g,n+=y*g*e):(r+=h/(2*e)*x,n+=y*q);c.x!==u&&(r=c.x);c.y!==d&&(n=c.y);w.x=r+b*Math.cos(a);w.y=n-b*Math.sin(a);return w}});h.Chart.prototype.callbacks.push(function(a){!1!==
33
+ a.options.connectors.enabled&&(w(a),this.pathfinder=new u(this),this.pathfinder.update(!0))})})(m,H)});
34
+ //# sourceMappingURL=pathfinder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathfinder.js.map","lineCount":33,"mappings":"A;;;;;;;;AASC,SAAS,CAACA,CAAD,CAAU,CACM,QAAtB,GAAI,MAAOC,OAAX,EAAkCA,MAAAC,QAAlC,EACIF,CAAA,CAAQ,SAAR,CACA,CADqBA,CACrB,CAAAC,MAAAC,QAAA,CAAiBF,CAFrB,EAG6B,UAAtB,GAAI,MAAOG,OAAX,EAAoCA,MAAAC,IAApC,CACHD,MAAA,CAAO,QAAS,EAAG,CACf,MAAOH,EADQ,CAAnB,CADG,CAKHA,CAAA,CAA8B,WAAtB,GAAA,MAAOK,WAAP,CAAoCA,UAApC,CAAiDC,IAAAA,EAAzD,CATY,CAAnB,CAAA,CAWC,QAAS,CAACD,CAAD,CAAa,CACpB,IAAIE,EAAc,QAAS,CAACC,CAAD,CAAI,CAkC3BC,QAASA,EAAsB,CAACC,CAAD,CAAYC,CAAZ,CAAkBC,CAAlB,CAA2B,CAClDC,CAAAA,CAAOD,CAAPC,EAAkB,CADgC,KAElDC,EAAQJ,CAAAK,OAARD,CAA2B,CACrBH,EAANK,EAAa,IAIjB,KAPsD,IAIlDC,CAJkD,CAKlDC,CAEJ,CAAOL,CAAP,EAAeC,CAAf,CAAA,CAGI,GAFAG,CAEI,CAFMH,CAEN,CAFcD,CAEd,EAFuB,CAEvB,CADJK,CACI,CADEF,CACF,CADQN,CAAA,CAAUO,CAAV,CAAAN,KACR,CAAM,CAAN,CAAAO,CAAJ,CACIL,CAAA,CAAOI,CAAP,CAAgB,CADpB,KAEO,IAAU,CAAV,CAAIC,CAAJ,CACHJ,CAAA,CAAQG,CAAR,CAAiB,CADd,KAGH,OAAOA,EAGf,OAAc,EAAP,CAAAJ,CAAA,CAAWA,CAAX,CAAkB,CAAlB,CAAsB,CAlByB,CA6D1DM,QAASA,EAAqB,CAACT,CAAD,CAAYU,CAAZ,CAAmB,CAG7C,IAFA,IAAIC,EAAIZ,CAAA,CAAuBC,CAAvB,CAAkCU,CAAAE,EAAlC,CAA4C,CAA5C,CAAJD,CAAqD,CAEzD,CAAOA,CAAA,EAAP,CAAA,CAAY,CACJ,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,EAAA,CAAA,EAAA,CAEA,CA9BR,CA8BQ,CAAA,CAAA,CAAA,CA9BR,CAAA,CAAA,CA8BQD,CA7BJE,EADJ,EACeC,CAAAC,KADf,EA8BQJ,CA5BJE,EAFJ,EAEeC,CAAAZ,KAFf,EA8BQS,CA3BJK,EAHJ;AAGeF,CAAAG,KAHf,EA8BQN,CA1BJK,EAJJ,EAIeF,CAAAI,KAwBX,IAAI,CAAJ,CAGI,MAAON,EAJH,CAOZ,MAAQ,EAVqC,CAyBjDO,QAASA,EAAgB,CAACC,CAAD,CAAW,CAChC,IAAIC,EAAO,EAEX,IAAID,CAAAd,OAAJ,CAAqB,CACjBe,CAAAC,KAAA,CAAU,GAAV,CAAeF,CAAA,CAAS,CAAT,CAAAG,MAAAV,EAAf,CAAoCO,CAAA,CAAS,CAAT,CAAAG,MAAAP,EAApC,CACA,KAAK,IAAIJ,EAAI,CAAb,CAAgBA,CAAhB,CAAoBQ,CAAAd,OAApB,CAAqC,EAAEM,CAAvC,CACIS,CAAAC,KAAA,CAAU,GAAV,CAAeF,CAAA,CAASR,CAAT,CAAAY,IAAAX,EAAf,CAAkCO,CAAA,CAASR,CAAT,CAAAY,IAAAR,EAAlC,CAHa,CAMrB,MAAOK,EATyB,CAyBpCI,QAASA,EAAqB,CAACX,CAAD,CAAWY,CAAX,CAAmB,CAC7CZ,CAAAI,KAAA,CAAgBS,CAAA,CAAIb,CAAAI,KAAJ,CAAmBQ,CAAAR,KAAnB,CAChBJ,EAAAG,KAAA,CAAgBV,CAAA,CAAIO,CAAAG,KAAJ,CAAmBS,CAAAT,KAAnB,CAChBH,EAAAZ,KAAA,CAAgByB,CAAA,CAAIb,CAAAZ,KAAJ,CAAmBwB,CAAAxB,KAAnB,CAChBY,EAAAC,KAAA,CAAgBR,CAAA,CAAIO,CAAAC,KAAJ,CAAmBW,CAAAX,KAAnB,CAJ6B,CAjJtB,IAUvBR,EAAMqB,IAAArB,IAViB,CAWvBoB,EAAMC,IAAAD,IAXiB,CAYvBE,EAAMD,IAAAC,IAZiB,CAavBC,EAAO/B,CAAA+B,KAiyBX,OAlpBiBhC,CAmBbiC,SAAUA,QAAS,CAACR,CAAD,CAAQC,CAAR,CAAa,CAC5B,MAAO,CACHH,KAAM,CAAC,GAAD,CAAME,CAAAV,EAAN,CAAeU,CAAAP,EAAf,CAAwB,GAAxB,CAA6BQ,CAAAX,EAA7B,CAAoCW,CAAAR,EAApC,CADH,CAEHf,UAAW,CAAC,CAAEsB,MAAOA,CAAT,CAAgBC,IAAKA,CAArB,CAAD,CAFR,CADqB,CAnBnB1B,CAmDbkC,cAAejC,CAAAkC,OAAA,CAAS,QAAS,CAACV,CAAD,CAAQC,CAAR,CAAaU,CAAb,CAAsB,CAoBnDC,QAASA,EAAa,CAACC,CAAD,CAAOC,CAAP,CAAgBC,CAAhB,CAAoBC,CAApB;AAA2BC,CAA3B,CAAmC,CACjD7B,CAAAA,CAAQ,CACRE,EAAGuB,CAAAvB,EADK,CAERG,EAAGoB,CAAApB,EAFK,CAKZL,EAAA,CAAM0B,CAAN,CAAA,CAAiBC,CAAA,CAAGC,CAAH,EAAYF,CAAZ,CAAjB,EAAyCG,CAAzC,EAAmD,CAAnD,CACA,OAAO7B,EAP8C,CAWzD8B,QAASA,EAAQ,CAAC3B,CAAD,CAAWH,CAAX,CAAkB+B,CAAlB,CAA6B,CAC1C,IAAIC,EAASd,CAAA,CAAIlB,CAAA,CAAM+B,CAAN,CAAJ,CAAuB5B,CAAA,CAAS4B,CAAT,CAAqB,KAArB,CAAvB,CAATC,CACQd,CAAA,CAAIlB,CAAA,CAAM+B,CAAN,CAAJ,CAAuB5B,CAAA,CAAS4B,CAAT,CAAqB,KAArB,CAAvB,CAEZ,OAAOP,EAAA,CACHxB,CADG,CAEH+B,CAFG,CAGH5B,CAHG,CAIH4B,CAJG,EAIUC,CAAA,CAAS,KAAT,CAAiB,KAJ3B,EAKHA,CAAA,CAAS,CAAT,CAAc,EALX,CAJmC,CA/BK,IAC/CvB,EAAW,EADoC,CAE/CwB,CAF+C,CAG/CC,EAAMf,CAAA,CACFI,CAAAY,gBADE,CAEFjB,CAAA,CAAIL,CAAAX,EAAJ,CAAYU,CAAAV,EAAZ,CAFE,CAEqBgB,CAAA,CAAIL,CAAAR,EAAJ,CAAYO,CAAAP,EAAZ,CAFrB,CAAA,CAGF,GAHE,CAGI,GANqC,CAO/C+B,EAAiBb,CAAAa,eAP8B,CAQ/CC,EAAkBtC,CAAA,CAAsBqC,CAAtB,CAAsCxB,CAAtC,CAClB0B,EAAAA,CAAgBvC,CAAA,CAAsBqC,CAAtB,CAAsCvB,CAAtC,CARpB,KAeI0B,CA6BiB,GAArB,CAAID,CAAJ,EACIE,CAMA,CANcJ,CAAA,CAAeE,CAAf,CAMd,CALAG,CAKA,CALWX,CAAA,CAASU,CAAT,CAAsB3B,CAAtB,CAA2BqB,CAA3B,CAKX,CAJAD,CAIA,CAJa,CACTrB,MAAO6B,CADE,CAET5B,IAAKA,CAFI,CAIb,CAAA0B,CAAA,CAAWE,CAPf,EASIF,CATJ,CASe1B,CAKQ,GAAvB,CAAIwB,CAAJ,GACIK,CASA,CATgBN,CAAA,CAAeC,CAAf,CAShB,CARAI,CAQA,CARWX,CAAA,CAASY,CAAT,CAAwB9B,CAAxB,CAA+BsB,CAA/B,CAQX,CAPAzB,CAAAE,KAAA,CAAc,CACVC,MAAOA,CADG,CAEVC,IAAK4B,CAFK,CAAd,CAOA,CACIA,CAAA,CAASP,CAAT,CADJ,CACoBtB,CAAA,CAAMsB,CAAN,CADpB,GAEIO,CAAA,CAASP,CAAT,CAFJ,CAEoBK,CAAA,CAASL,CAAT,CAFpB,GAIIA,CAcA,CAdc,GAAR,GAAAA,CAAA,CAAc,GAAd,CAAoB,GAc1B,CAbAF,CAaA,CAbSpB,CAAA,CAAMsB,CAAN,CAaT,CAbsBrB,CAAA,CAAIqB,CAAJ,CAatB,CAZAzB,CAAAE,KAAA,CAAc,CACVC,MAAO6B,CADG,CAEV5B,IAAKW,CAAA,CACDiB,CADC,CAEDP,CAFC,CAGDQ,CAHC,CAIDR,CAJC,EAIMF,CAAA,CAAS,KAAT,CAAiB,KAJvB,EAKDA,CAAA,CAAS,CAAT,CAAc,EALb,CAFK,CAAd,CAYA,CAAAE,CAAA,CAAc,GAAR,GAAAA,CAAA,CAAc,GAAd,CAAoB,GAlB9B,CAVJ,CAkCAS,EAAA,CAAelC,CAAAd,OAAA,CACXc,CAAA,CAASA,CAAAd,OAAT;AAA2B,CAA3B,CAAAkB,IADW,CAEXD,CACJ6B,EAAA,CAAWjB,CAAA,CAAcmB,CAAd,CAA4BT,CAA5B,CAAiCK,CAAjC,CACX9B,EAAAE,KAAA,CAAc,CACVC,MAAO+B,CADG,CAEV9B,IAAK4B,CAFK,CAAd,CAOAG,EAAA,CAAYpB,CAAA,CAAciB,CAAd,CADE,GAARP,GAAAA,CAAAA,CAAc,GAAdA,CAAoB,GACd,CAA6BK,CAA7B,CACZ9B,EAAAE,KAAA,CAAc,CACVC,MAAO6B,CADG,CAEV5B,IAAK+B,CAFK,CAAd,CAMAnC,EAAAE,KAAA,CAAcsB,CAAd,CAEA,OAAO,CACHvB,KAAMF,CAAA,CAAiBC,CAAjB,CADH,CAEHnB,UAAWmB,CAFR,CAjH4C,CAAxC,CAqHZ,CACCoC,kBAAmB,CAAA,CADpB,CArHY,CAnDF1D,CA0Mb2D,UAAW1D,CAAAkC,OAAA,CAAS,QAAS,CAACV,CAAD,CAAQC,CAAR,CAAaU,CAAb,CAAsB,CAgD/CwB,QAASA,EAAU,CAACC,CAAD,CAAYC,CAAZ,CAAqBC,CAArB,CAAmC,CAAA,IAC9CC,CAD8C,CAE9CC,CAF8C,CAG9CC,CAH8C,CAI9CC,CAJ8C,CAK9CrD,CAL8C,CAM9CsD,EAAkBP,CAAA9C,EAAA,CAAc+C,CAAA/C,EAAd,CAA0B,CAA1B,CAA+B,EAEjD8C,EAAA9C,EAAJ,CAAkB+C,CAAA/C,EAAlB,EACIiD,CACA,CADaH,CACb,CAAAI,CAAA,CAAYH,CAFhB,GAIIE,CACA,CADaF,CACb,CAAAG,CAAA,CAAYJ,CALhB,CAQIA,EAAA3C,EAAJ,CAAkB4C,CAAA5C,EAAlB,EACIiD,CACA,CADcN,CACd,CAAAK,CAAA,CAAeJ,CAFnB,GAIIK,CACA,CADcL,CACd,CAAAI,CAAA,CAAeL,CALnB,CAmBA,KATA/C,CASA,CATsB,CAAlB,CAAAsD,CAAA,CAEA3D,CAAA,CAAIP,CAAA,CAAuB+C,CAAvB,CAAuCgB,CAAAlD,EAAvC,CAAJ,CACIkC,CAAAzC,OADJ,CAC4B,CAD5B,CAFA,CAMA,CAGJ,CAAOyC,CAAA,CAAenC,CAAf,CAAP,GACsB,CADtB,CACIsD,CADJ,EAC2BnB,CAAA,CAAenC,CAAf,CAAAV,KAD3B,EACqD6D,CAAAlD,EADrD,EAEsB,CAFtB,CAEIqD,CAFJ,EAE2BnB,CAAA,CAAenC,CAAf,CAAAG,KAF3B,EAEqD+C,CAAAjD,EAFrD,EAAA,CAGG,CAGC,GACIkC,CAAA,CAAenC,CAAf,CAAAV,KADJ,EAC8B6D,CAAAlD,EAD9B,EAEIkC,CAAA,CAAenC,CAAf,CAAAG,KAFJ,EAE8B+C,CAAAjD,EAF9B,EAGIkC,CAAA,CAAenC,CAAf,CAAAM,KAHJ,EAG8B8C,CAAAhD,EAH9B,EAII+B,CAAA,CAAenC,CAAf,CAAAK,KAJJ,EAI8BgD,CAAAjD,EAJ9B,CAMI,MAAI6C,EAAJ,CACW,CACH7C,EAAG2C,CAAA3C,EADA,CAEHH,EAAG8C,CAAA9C,EAAA,CAAc+C,CAAA/C,EAAd,CACCkC,CAAA,CAAenC,CAAf,CAAAV,KADD,CAC0B,CAD1B,CAEC6C,CAAA,CAAenC,CAAf,CAAAG,KAFD,CAE0B,CAJ1B,CAKHD,SAAUiC,CAAA,CAAenC,CAAf,CALP,CADX;AAUO,CACHC,EAAG8C,CAAA9C,EADA,CAEHG,EAAG2C,CAAA3C,EAAA,CAAc4C,CAAA5C,EAAd,CACC+B,CAAA,CAAenC,CAAf,CAAAM,KADD,CAC0B,CAD1B,CAEC6B,CAAA,CAAenC,CAAf,CAAAK,KAFD,CAE0B,CAJ1B,CAKHH,SAAUiC,CAAA,CAAenC,CAAf,CALP,CASXA,EAAA,EAAKsD,CA5BN,CA+BH,MAAON,EArE2C,CAoGtDO,QAASA,EAAiB,CACtBrD,CADsB,CAEtB6C,CAFsB,CAGtBC,CAHsB,CAItBQ,CAJsB,CAKtB1C,CALsB,CAMxB,CAAA,IACM2C,EAAa3C,CAAA4C,KADnB,CAEMC,EAAa7C,CAAA8C,KAFnB,CAGM3B,EAAMuB,CAAA,CAAS,GAAT,CAAe,GAH3B,CAIMK,EAAa,CAAE5D,EAAG8C,CAAA9C,EAAL,CAAkBG,EAAG2C,CAAA3C,EAArB,CAJnB,CAKM0D,EAAa,CAAE7D,EAAG8C,CAAA9C,EAAL,CAAkBG,EAAG2C,CAAA3C,EAArB,CAGb2D,EAAAA,CAAqB7D,CAAA,CAAS+B,CAAT,CAAe,KAAf,CAArB8B,EACoBN,CAAA,CAAWxB,CAAX,CAAiB,KAAjB,CACpB+B,KAAAA,EAAqB9D,CAAA,CAAS+B,CAAT,CAAe,KAAf,CAArB+B,EACoBP,CAAA,CAAWxB,CAAX,CAAiB,KAAjB,CADpB+B,CAEAC,EAAqB/D,CAAA,CAAS+B,CAAT,CAAe,KAAf,CAArBgC,EACoBN,CAAA,CAAW1B,CAAX,CAAiB,KAAjB,CAHpB+B,CAIAE,EAAqBhE,CAAA,CAAS+B,CAAT,CAAe,KAAf,CAArBiC,EACoBP,CAAA,CAAW1B,CAAX,CAAiB,KAAjB,CALpB+B,CAQAG,EAAclD,CAAA,CAAIf,CAAA,CAAS+B,CAAT,CAAe,KAAf,CAAJ,CAA4Bc,CAAA,CAAUd,CAAV,CAA5B,CARd+B,CASAI,EAAcnD,CAAA,CAAIf,CAAA,CAAS+B,CAAT,CAAe,KAAf,CAAJ,CAA4Bc,CAAA,CAAUd,CAAV,CAA5B,CAGdF,EAAAA,CAA0C,EAAjC,CAAAd,CAAA,CAAIkD,CAAJ,CAAkBC,CAAlB,CAAA,CACLrB,CAAA,CAAUd,CAAV,CADK,CACYe,CAAA,CAAQf,CAAR,CADZ,CAELmC,CAFK,CAESD,CAItBL,EAAA,CAAW7B,CAAX,CAAA,CAAkB/B,CAAA,CAAS+B,CAAT,CAAe,KAAf,CAClB4B,EAAA,CAAW5B,CAAX,CAAA,CAAkB/B,CAAA,CAAS+B,CAAT,CAAe,KAAf,CAClBoC,EAAA,CAAWvB,CAAA,CAAWC,CAAX,CAAsBe,CAAtB,CAAkCN,CAAlC,CAAA,CAA0CvB,CAA1C,CAAX,GACY6B,CAAA,CAAW7B,CAAX,CACZqC,EAAA,CAAWxB,CAAA,CAAWC,CAAX,CAAsBc,CAAtB,CAAkCL,CAAlC,CAAA,CAA0CvB,CAA1C,CAAX,GACY4B,CAAA,CAAW5B,CAAX,CACZF,EAAA,CAASsC,CAAA,CACJC,CAAA,CAAWvC,CAAX,CAAoB,CAAA,CADhB,CAEJuC,CAAA,CAAW,CAAA,CAAX,CAAmBvC,CAOxBA,EAAA,CAASiC,CAAA,CACJD,CAAA,CAAqBhC,CAArB,CAA8B,CAAA,CAD1B,CAEJgC,CAAA,CAAqB,CAAA,CAArB,CAA6BhC,CAOlC,OAJSmC,EAAAnC,CACJkC,CAAA,CAAqBlC,CAArB,CAA8B,CAAA,CAD1BA,CAEJkC,CAAA,CAAqB,CAAA,CAArB,CAA6BlC,CAlDpC,CAwDFwC,QAASA,EAAW,CAACxB,CAAD,CAAYC,CAAZ,CAAqBQ,CAArB,CAA6B,CAE7C,GAAIT,CAAA9C,EAAJ,GAAoB+C,CAAA/C,EAApB,EAAiC8C,CAAA3C,EAAjC;AAAiD4C,CAAA5C,EAAjD,CACI,MAAO,EAHkC,KAMzC6B,EAAMuB,CAAA,CAAS,GAAT,CAAe,GANoB,CASzChB,CATyC,CAWzCgC,CAXyC,CAYzCC,CAZyC,CAazCC,CAbyC,CAczCC,EAAiBrD,CAAAsD,gBAAAC,OACjB/D,EAAAA,CAAS,CACL4C,KAAM,CACFpE,KAAMwF,CADJ,CAEF3E,KAAM4E,CAFJ,CAGFzE,KAAM0E,CAHJ,CAIF3E,KAAM4E,CAJJ,CADD,CAOLrB,KAAMtC,CAAAqC,WAPD,CAaba,EAAA,CACI1E,CAAA,CAAsBqC,CAAtB,CAAsCY,CAAtC,CACsB,GAA1B,CAAIyB,CAAJ,EACIA,CA4EA,CA5EqBrC,CAAA,CAAeqC,CAAf,CA4ErB,CA3EAU,CA2EA,CA3EiB3B,CAAA,CACbiB,CADa,CACOzB,CADP,CACkBC,CADlB,CAC2BQ,CAD3B,CACmC1C,CADnC,CA2EjB,CAtEAD,CAAA,CAAsB2D,CAAtB,CAA0ClD,CAAAqC,WAA1C,CAsEA,CApEAe,CAoEA,CApEkBlB,CAAA,CAAS,CACvBpD,EAAG2C,CAAA3C,EADoB,CAEvBH,EAAGuE,CAAA,CAAmBU,CAAA,CAAiB,MAAjB,CAA0B,MAA7C,CAAHjF,EACKiF,CAAA,CAAiB,CAAjB,CAAsB,EAD3BjF,CAFuB,CAAT,CAId,CACAA,EAAG8C,CAAA9C,EADH,CAEAG,EAAGoE,CAAA,CAAmBU,CAAA,CAAiB,MAAjB,CAA0B,MAA7C,CAAH9E,EACK8E,CAAA,CAAiB,CAAjB,CAAsB,EAD3B9E,CAFA,CAgEJ,CAxDAqE,CAwDA,CAxD2B3E,CAAA,CACvBqC,CADuB,CACPuC,CADO,CAwD3B,CArDgC,EAqDhC,CArDID,CAqDJ,GApDIA,CA8BA,CA9B2BtC,CAAA,CACvBsC,CADuB,CA8B3B,CAzBA5D,CAAA,CACI4D,CADJ,CAEInD,CAAAqC,WAFJ,CAyBA,CAnBAe,CAAA,CAAgBzC,CAAhB,CAmBA,CAnBuBiD,CAAA,CAAiBnE,CAAA,CACpCyD,CAAA,CAAmBvC,CAAnB,CAAyB,KAAzB,CADoC,CACF0C,CADE,CACe,CADf,EAGhCF,CAAA,CAAyBxC,CAAzB,CAA+B,KAA/B,CAHgC,CAIhCuC,CAAA,CAAmBvC,CAAnB,CAAyB,KAAzB,CAJgC,EAKhC,CALgC,CAAjB,CAOnBtC,CAAA,CACI6E,CAAA,CAAmBvC,CAAnB,CAAyB,KAAzB,CADJ,CACsC0C,CADtC,CACuD,CADvD,EAIQF,CAAA,CAAyBxC,CAAzB,CAA+B,KAA/B,CAJR,CAKQuC,CAAA,CAAmBvC,CAAnB,CAAyB,KAAzB,CALR,EAMQ,CANR,CAYJ,CAAIc,CAAA9C,EAAJ,GAAoByE,CAAAzE,EAApB,EACI8C,CAAA3C,EADJ,GACoBsE,CAAAtE,EADpB,EAEQ+E,CAYJ,GAXIT,CAAA,CAAgBzC,CAAhB,CAWJ,CAX2BiD,CAAA,CACnBnE,CAAA,CACIyD,CAAA,CAAmBvC,CAAnB,CAAyB,KAAzB,CADJ,CAEIwC,CAAA,CAAyBxC,CAAzB,CAA+B,KAA/B,CAFJ,CADmB,CAIf,CAJe,CAKnBtC,CAAA,CACI6E,CAAA,CAAmBvC,CAAnB,CAAyB,KAAzB,CADJ,CAEIwC,CAAA,CAAyBxC,CAAzB,CAA+B,KAA/B,CAFJ,CALmB,CAQf,CAGZ,EAAAkD,CAAA,CAAqB,CAACA,CAd1B,EAkBIA,CAlBJ,CAkByB,CAAA,CAI7B,EAAA3E,CAAA,CAAW,CAAC,CACRG,MAAOoC,CADC;AAERnC,IAAK8D,CAFG,CAAD,CA7Ef,GAoFIU,CAcA,CAdQtC,CAAA,CAAWC,CAAX,CAAsB,CAC1B9C,EAAGuD,CAAA,CAASR,CAAA/C,EAAT,CAAqB8C,CAAA9C,EADE,CAE1BG,EAAGoD,CAAA,CAAST,CAAA3C,EAAT,CAAuB4C,CAAA5C,EAFA,CAAtB,CAGLoD,CAHK,CAcR,CATAhD,CASA,CATW,CAAC,CACRG,MAAOoC,CADC,CAERnC,IAAK,CACDX,EAAGmF,CAAAnF,EADF,CAEDG,EAAGgF,CAAAhF,EAFF,CAFG,CAAD,CASX,CAAIgF,CAAA,CAAM5B,CAAA,CAAS,GAAT,CAAe,GAArB,CAAJ,GAAkCR,CAAA,CAAQQ,CAAA,CAAS,GAAT,CAAe,GAAvB,CAAlC,GAEI0B,CAuBA,CAvBiB3B,CAAA,CACb6B,CAAAlF,SADa,CACGkF,CADH,CACUpC,CADV,CACmB,CAACQ,CADpB,CAC4B1C,CAD5B,CAuBjB,CAlBAD,CAAA,CAAsBuE,CAAAlF,SAAtB,CAAsCoB,CAAAqC,WAAtC,CAkBA,CAhBAnB,CAgBA,CAhBW,CACPvC,EAAGuD,CAAA,CACC4B,CAAAnF,EADD,CAECmF,CAAAlF,SAAA,CAAegF,CAAA,CAAiB,MAAjB,CAA0B,MAAzC,CAFD,EAGMA,CAAA,CAAiB,CAAjB,CAAsB,EAH5B,CADI,CAKP9E,EAAGoD,CAAA,CACC4B,CAAAlF,SAAA,CAAegF,CAAA,CAAiB,MAAjB,CAA0B,MAAzC,CADD,EAEMA,CAAA,CAAiB,CAAjB,CAAsB,EAF5B,EAGCE,CAAAhF,EARG,CAgBX,CAFAoD,CAEA,CAFS,CAACA,CAEV,CAAAhD,CAAA,CAAWA,CAAA6E,OAAA,CAAgBd,CAAA,CAAY,CACnCtE,EAAGmF,CAAAnF,EADgC,CAEnCG,EAAGgF,CAAAhF,EAFgC,CAAZ,CAGxBoC,CAHwB,CAGdgB,CAHc,CAAhB,CAzBf,CAlGJ,CAwIA,OAJAhD,EAIA,CAJWA,CAAA6E,OAAA,CAAgBd,CAAA,CACvB/D,CAAA,CAASA,CAAAd,OAAT,CAA2B,CAA3B,CAAAkB,IADuB,CACYoC,CADZ,CACqB,CAACQ,CADtB,CAAhB,CAlKkC,CA2KjD8B,QAASA,EAAmB,CAACpF,CAAD,CAAWH,CAAX,CAAkBwF,CAAlB,CAA6B,CAAA,IACjD/B,EAAS7D,CAAA,CAAIO,CAAAC,KAAJ,CAAoBJ,CAAAE,EAApB,CAA6BF,CAAAE,EAA7B,CAAuCC,CAAAZ,KAAvC,CAATkE,CACQ7D,CAAA,CAAIO,CAAAG,KAAJ,CAAoBN,CAAAK,EAApB,CAA6BL,CAAAK,EAA7B,CAAuCF,CAAAI,KAAvC,CAKRyB,EAAAA,CAASwB,CAAA,CACLrD,CADK,CACKH,CADL,CACYwF,CADZ,CACuB/B,CADvB,CAJA1C,CACL4C,KAAMpC,CAAAqC,WADD7C,CAEL8C,KAAMtC,CAAAqC,WAFD7C,CAIA,CAIb,OAAO0C,EAAA,CAAS,CACZpD,EAAGL,CAAAK,EADS,CAEZH,EAAGC,CAAA,CAAS6B,CAAA,CAAS,MAAT,CAAkB,MAA3B,CAAH9B,EAAyC8B,CAAA;AAAS,CAAT,CAAc,EAAvD9B,CAFY,CAAT,CAGH,CACAA,EAAGF,CAAAE,EADH,CAEAG,EAAGF,CAAA,CAAS6B,CAAA,CAAS,MAAT,CAAkB,MAA3B,CAAH3B,EAAyC2B,CAAA,CAAS,CAAT,CAAc,EAAvD3B,CAFA,CAdiD,CA7XV,IAqB3CoD,EAAStC,CAAA,CACLI,CAAAY,gBADK,CAELjB,CAAA,CAAIL,CAAAX,EAAJ,CAAYU,CAAAV,EAAZ,CAFK,CAEkBgB,CAAA,CAAIL,CAAAR,EAAJ,CAAYO,CAAAP,EAAZ,CAFlB,CArBkC,CAyB3C6B,EAAMuB,CAAA,CAAS,GAAT,CAAe,GAzBsB,CA2B3CzB,CA3B2C,CA4B3CyD,CA5B2C,CA6B3CC,EAAc,EA7B6B,CA8B3CN,EAAqB,CAAA,CA9BsB,CAmC3CO,EAAUpE,CAAAqE,gBAnCiC,CAoC3Cb,EAAWnF,CAAA,CAAIgB,CAAAV,EAAJ,CAAaW,CAAAX,EAAb,CAAX6E,CAAiCY,CAAAE,SAAjCd,CAAoD,EApCT,CAqC3CC,EAAWhE,CAAA,CAAIJ,CAAAV,EAAJ,CAAaW,CAAAX,EAAb,CAAX8E,CAAiCW,CAAAE,SAAjCb,CAAoD,EArCT,CAsC3CC,EAAWrF,CAAA,CAAIgB,CAAAP,EAAJ,CAAaQ,CAAAR,EAAb,CAAX4E,CAAiCU,CAAAG,UAAjCb,CAAqD,EAtCV,CAuC3CC,EAAWlE,CAAA,CAAIJ,CAAAP,EAAJ,CAAaQ,CAAAR,EAAb,CAAX6E,CAAiCS,CAAAG,UAAjCZ,CAAqD,EAvCV,CA0C3C9C,EAAiBb,CAAAa,eACjBC,EAAAA,CAAkBhD,CAAA,CAAuB+C,CAAvB,CAAuC2C,CAAvC,CAClBzC,EAAAA,CAAgBjD,CAAA,CAAuB+C,CAAvB,CAAuC4C,CAAvC,CAuWpB5C,EAAA,CACIA,CAAA2D,MAAA,CAAqB1D,CAArB,CAAsCC,CAAtC,CAAsD,CAAtD,CAIgE,GAApE,EAAKA,CAAL,CAAqBvC,CAAA,CAAsBqC,CAAtB,CAAsCvB,CAAtC,CAArB,IACI4E,CASA,CAToBF,CAAA,CAChBnD,CAAA,CAAeE,CAAf,CADgB,CAEhBzB,CAFgB,CAGhBD,CAHgB,CASpB,CAJA8E,CAAA/E,KAAA,CAAiB,CACbE,IAAKA,CADQ,CAEbD,MAAO6E,CAFM,CAAjB,CAIA,CAAA5E,CAAA,CAAM4E,CAVV,CAcA,KAAA,CACoE,EADpE,EACKnD,CADL,CACqBvC,CAAA,CAAsBqC,CAAtB,CAAsCvB,CAAtC,CADrB,EAAA,CAGImB,CAYA,CAZiC,CAYjC,CAZSnB,CAAA,CAAIqB,CAAJ,CAYT,CAZoBtB,CAAA,CAAMsB,CAAN,CAYpB,CAXAuD,CAWA,CAXoB,CAChBvF,EAAGW,CAAAX,EADa,CAEhBG,EAAGQ,CAAAR,EAFa,CAWpB,CAPAoF,CAAA,CAAkBvD,CAAlB,CAOA,CAPyBE,CAAA,CAAeE,CAAf,CAAA,CACrBN,CAAA,CAASE,CAAT,CAAe,KAAf,CAAuBA,CAAvB,CAA6B,KADR,CAOzB,EALKF,CAAA,CAAS,CAAT,CAAc,EAKnB,EAJA0D,CAAA/E,KAAA,CAAiB,CACbE,IAAKA,CADQ,CAEbD,MAAO6E,CAFM,CAAjB,CAIA,CAAA5E,CAAA,CAAM4E,CAIVhF,EAAA,CAAW+D,CAAA,CAAY5D,CAAZ,CAAmBC,CAAnB,CAAwB4C,CAAxB,CAGXhD,EAAA,CAAWA,CAAA6E,OAAA,CAAgBI,CAAAM,QAAA,EAAhB,CAEX;MAAO,CACHtF,KAAMF,CAAA,CAAiBC,CAAjB,CADH,CAEHnB,UAAWmB,CAFR,CA9bwC,CAAxC,CAkcR,CACCoC,kBAAmB,CAAA,CADpB,CAlcQ,CA1ME1D,CA5JU,CAAb,CA+yBhBF,CA/yBgB,CAgzBjB,UAAS,CAACG,CAAD,CAAI,CAwCVA,CAAA6G,YAAAC,UAAAC,QAAAC,MAAA,CAAwCC,QAAS,CAACnG,CAAD,CAAIG,CAAJ,CAAOiG,CAAP,CAAUC,CAAV,CAAa,CAC1D,MAAO,CACH,GADG,CACErG,CADF,CACKG,CADL,CACSkG,CADT,CACa,CADb,CAEH,GAFG,CAEErG,CAFF,CAEMoG,CAFN,CAESjG,CAFT,CAGH,GAHG,CAGEH,CAHF,CAGKG,CAHL,CAGSkG,CAHT,CAGa,CAHb,CAIH,GAJG,CAIErG,CAJF,CAIMoG,CAJN,CAISjG,CAJT,CAIakG,CAJb,CADmD,CAqC9DnH,EAAA6G,YAAAC,UAAAC,QAAA,CAAgC,YAAhC,CAAA,CAAgD,QAAS,CAACjG,CAAD,CAAIG,CAAJ,CAAOiG,CAAP,CAAUC,CAAV,CAAa,CAClE,MAAOnH,EAAA6G,YAAAC,UAAAC,QAAAC,MAAA,CAAsClG,CAAtC,CAAyCG,CAAzC,CAA4CiG,CAA5C,CAAgD,CAAhD,CAAmDC,CAAnD,CAD2D,CAgCtEnH,EAAA6G,YAAAC,UAAAC,QAAA,CAAgC,eAAhC,CAAA,CAAmD,QAAS,CAACjG,CAAD,CAAIG,CAAJ,CAAOiG,CAAP,CAAUC,CAAV,CAAa,CACrE,MAAO,CACH,GADG,CACErG,CADF,CACMoG,CADN,CACSjG,CADT,CAEH,GAFG,CAEEH,CAFF,CAEKG,CAFL,CAESkG,CAFT,CAEa,CAFb,CAGH,GAHG,CAGErG,CAHF,CAGMoG,CAHN,CAGSjG,CAHT,CAGakG,CAHb,CAIH,GAJG,CAD8D,CA8BzEnH,EAAA6G,YAAAC,UAAAC,QAAA,CAAgC,cAAhC,CAAA,CACQ/G,CAAA6G,YAAAC,UAAAC,QAAA,CAAgC,eAAhC,CA8BR/G;CAAA6G,YAAAC,UAAAC,QAAA,CAAgC,oBAAhC,CAAA,CAAwD,QAAS,CAACjG,CAAD,CAAIG,CAAJ,CAAOiG,CAAP,CAAUC,CAAV,CAAa,CAC1E,MAAOnH,EAAA6G,YAAAC,UAAAC,QAAA,CAAgC,eAAhC,CAAA,CAAiDjG,CAAjD,CAAoDG,CAApD,CAAuDiG,CAAvD,CAA2D,CAA3D,CAA8DC,CAA9D,CADmE,CAyB9EnH,EAAA6G,YAAAC,UAAAC,QAAA,CAAgC,mBAAhC,CAAA,CACQ/G,CAAA6G,YAAAC,UAAAC,QAAA,CAAgC,oBAAhC,CApME,CAAb,CAAA,CAsMClH,CAtMD,CAuMA,UAAS,CAACG,CAAD,CAAIoH,CAAJ,CAA0B,CA8ShCC,QAASA,EAAU,CAACzG,CAAD,CAAQ,CAAA,IACnB0G,EAAY1G,CAAA0G,UAIhB,OAAIA,EAAJ,CACW,CACHnH,KAAMmH,CAAAxG,EADH,CAEHE,KAAMsG,CAAAxG,EAANE,CAAoBsG,CAAAC,MAFjB,CAGHpG,KAAMmG,CAAArG,EAHH,CAIHC,KAAMoG,CAAArG,EAANC,CAAoBoG,CAAAE,OAJjB,CADX,CAWO,CADPC,CACO,CADF7G,CAAA8G,QACE,EADe9G,CAAA8G,QAAAC,QAAA,EACf,EAAK,CACRxH,KAAMS,CAAAgH,MAANzH,CAAoBsH,CAAAF,MAApBpH,CAA+B,CADvB,CAERa,KAAMJ,CAAAgH,MAAN5G,CAAoByG,CAAAF,MAApBvG,CAA+B,CAFvB,CAGRG,KAAMP,CAAAiH,MAAN1G,CAAoBsG,CAAAD,OAApBrG,CAAgC,CAHxB,CAIRD,KAAMN,CAAAiH,MAAN3G,CAAoBuG,CAAAD,OAApBtG,CAAgC,CAJxB,CAAL,CAKH,IArBmB,CAsC3B4G,QAASA,EAAuB,CAAC5H,CAAD,CAAY,CAmCxC,IAnCwC,IACpC6H;AAAM7H,CAAAK,OAD8B,CAEpCM,EAAI,CAFgC,CAGpCmH,CAHoC,CAIpCC,CAJoC,CAKpCC,EAAY,EALwB,CAOpCC,EAAWA,QAAS,CAACC,CAAD,CAAIC,CAAJ,CAAOC,CAAP,CAAiB,CAE7B5C,CAAAA,CAAS3D,CAAA,CAAKuG,CAAL,CAAe,EAAf,CAFoB,KAG7BC,EAAWH,CAAAlH,KAAXqH,CAAoB7C,CAApB6C,CAA6BF,CAAAlH,KAA7BoH,CAAsC7C,CAAtC6C,EACYH,CAAAjH,KADZoH,CACqB7C,CADrB6C,CAC8BF,CAAAnH,KAD9BqH,CACuC7C,CAJV,CAK7B8C,EAAWJ,CAAApH,KAAXwH,CAAoB9C,CAApB8C,CAA6BH,CAAAlI,KAA7BqI,CAAsC9C,CAAtC8C,EACYJ,CAAAjI,KADZqI,CACqB9C,CADrB8C,CAC8BH,CAAArH,KAD9BwH,CACuC9C,CANV,CAO7B+C,EAAYF,CAAA,CACRH,CAAAjI,KAAA,CAASkI,CAAArH,KAAT,CAAkBoH,CAAAjI,KAAlB,CAA2BkI,CAAArH,KAA3B,CAAoCqH,CAAAlI,KAApC,CAA6CiI,CAAApH,KADrC,CAER0H,QATyB,CAU7BC,EAAYH,CAAA,CACRJ,CAAAjH,KAAA,CAASkH,CAAAnH,KAAT,CAAkBkH,CAAAjH,KAAlB,CAA2BkH,CAAAnH,KAA3B,CAAoCmH,CAAAlH,KAApC,CAA6CiH,CAAAlH,KADrC,CAERwH,QAIR,OAAIF,EAAJ,EAAgBD,CAAhB,CAEQ7C,CAAA,CACIyC,CAAA,CAASC,CAAT,CAAYC,CAAZ,CAAexG,IAAA+G,MAAA,CAAWlD,CAAX,CAAoB,CAApB,CAAf,CADJ,CAEIgD,QAJZ,CAQOlI,CAAA,CAAIiI,CAAJ,CAAeE,CAAf,CAxB0B,CA4BzC,CAAO9H,CAAP,CAAWkH,CAAX,CAAgB,EAAElH,CAAlB,CAGI,IAAKmH,CAAL,CAASnH,CAAT,CAAa,CAAb,CAAgBmH,CAAhB,CAAoBD,CAApB,CAAyB,EAAEC,CAA3B,CACIC,CAEA,CAFmBE,CAAA,CAASjI,CAAA,CAAUW,CAAV,CAAT,CAAuBX,CAAA,CAAU8H,CAAV,CAAvB,CAEnB,CAAuB,EAAvB,CAAIC,CAAJ,EACIC,CAAA3G,KAAA,CAAe0G,CAAf,CAKZC,EAAA3G,KAAA,CAAe,EAAf,CAEA,OAAOK,EAAA,CACHC,IAAA+G,MAAA,CACIV,CAAAW,KAAA,CAAe,QAAS,CAACT,CAAD,CAAIC,CAAJ,CAAO,CAC3B,MAAOD,EAAP,CAAWC,CADgB,CAA/B,CAAA,CAKIxG,IAAA+G,MAAA,CAAWV,CAAA3H,OAAX,CAA8B,EAA9B,CALJ,CADJ,CAOQ,CAPR,CAOY,CAPZ,CADG,CAUH,CAVG,CAjDiC,CAiF5CuI,QAASA,EAAU,CAACzG,CAAD,CAAOE,CAAP,CAAWJ,CAAX,CAAoB,CACnC,IAAA4G,KAAA,CAAU1G,CAAV,CAAgBE,CAAhB,CAAoBJ,CAApB,CADmC,CAiXvC6G,QAASA,EAAU,CAACC,CAAD,CAAQ,CACvB,IAAAF,KAAA,CAAUE,CAAV,CADuB,CAtxBK;AAwuChCC,QAASA,EAAU,CAACD,CAAD,CAAQ,CACvB,GACIA,CAAA9G,QAAAgH,WADJ,EAEIF,CAAAG,OAAAC,OAAA,CAAoB,QAAS,CAACC,CAAD,CAAMF,CAAN,CAAc,CACnCA,CAAAjH,QAAJ,EACIoH,CAAA,CACI,CAAA,CADJ,CAGQH,CAAAjH,QAAAqH,WAHR,CAGoCJ,CAAAjH,QAAAqH,WAHpC,EAIQ,EAJR,CAKOJ,CAAAjH,QAAAgH,WALP,CAQJ,OAAOG,EAAP,EAAcF,CAAAjH,QAAd,EAAgCiH,CAAAjH,QAAAgH,WAVO,CAA3C,CAWG,CAAA,CAXH,CAFJ,CAeII,CAAA,CACI,CAAA,CADJ,CAEKN,CAAA9G,QAAAqH,WAFL,CAEgCP,CAAA9G,QAAAqH,WAFhC,EAE4D,EAF5D,CAGIP,CAAA9G,QAAAgH,WAHJ,CAKA,CAAAnJ,CAAAyJ,MAAA,CAAQ,uGAAR,CArBmB,CAxuCK,IAU5BC,EAAU1J,CAAA0J,QAVkB,CAW5BC,EAAU3J,CAAA2J,QAXkB,CAY5BzH,EAASlC,CAAAkC,OAZmB,CAa5B0H,EAAW5J,CAAA4J,SAbiB,CAc5BL,EAAQvJ,CAAAuJ,MAdoB,CAe5BxH,EAAO/B,CAAA+B,KAfqB,CAgB5BH,EAAMC,IAAAD,IAhBsB,CAiB5BpB,EAAMqB,IAAArB,IAWV0B,EAAA,CAAOlC,CAAA6J,eAAP,CAAyB,CAkBrBL,WAAY,CA+ERM,KAAM,UA/EE;AAuFRC,UAAW,CAvFH,CAgGRC,OAAQ,CAoDJC,QAAS,CAAA,CApDL,CA2DJC,MAAO,QA3DH,CAkEJC,cAAe,QAlEX,CAuEJC,OAAQ,CAAA,CAvEJ,CA4EJL,UAAW,CA5EP,CAhGA,CAsLRM,YAAa,CAITC,OAAQ,SAJC,CAtLL,CAoMRC,UAAW,CAIPD,OAAQ,cAJD,CApMH,CAlBS,CAAzB,CA4YAxB,EAAAhC,UAAA,CAAuB,CAgBnBiC,KAAMA,QAAS,CAAC1G,CAAD,CAAOE,CAAP,CAAWJ,CAAX,CAAoB,CAC/B,IAAAyB,UAAA,CAAiBvB,CACjB,KAAAwB,QAAA,CAAetB,CACf,KAAAJ,QAAA,CAAeA,CACf,KAAA8G,MAAA,CAAa5G,CAAA+G,OAAAH,MACb,KAAAE,WAAA,CAAkB,IAAAF,MAAAE,WALa,CAhBhB,CA2CnBqB,WAAYA,QAAS,CAAClJ,CAAD,CAAOmJ,CAAP,CAAgBC,CAAhB,CAA2B,CAAA,IAExCzB,EAAQ,IAAAA,MAFgC,CAGxC0B,EAAa1B,CAAA0B,WAH2B,CAIxCxB,EAAaF,CAAAE,WAJ2B,CAKxCyB,EAAU,CAAC3B,CAAA9G,QAAA8G,MAAA4B,UAAXD,EAA0D,CAAA,CAA1DA,GAA4CF,CALJ,CAMxCI,EALaC,IAKCC,SAAdF,EALaC,IAKwBC,SAAA1J,KAIpC6H,EAAA8B,MAAL,GACI9B,CAAA8B,MADJ,CACuBhC,CAAAiC,SAAAC,EAAA,EAAAC,SAAA,CACL,6BADK,CAAAC,KAAA,CAET,CAAEC,OAAS,EAAX,CAFS,CAAAC,IAAA,CAGVtC,CAAAuC,YAHU,CADvB,CAUArC;CAAA8B,MAAAQ,UAAA,CAA2BxC,CAAAyC,SAA3B,CAA2CzC,CAAA0C,QAA3C,CAGMb,EAAN,EAAqBA,CAAAI,SAArB,GACIJ,CAEA,CAFc7B,CAAAiC,SAAA5J,KAAA,EAAAiK,IAAA,CACLpC,CAAA8B,MADK,CAEd,CAAKN,CAAL,EACIG,CAAAO,KAAA,CAAiB,CACbO,QAAS,CADI,CAAjB,CAJR,CAWAd,EAAAO,KAAA,CAAiBZ,CAAjB,CACAoB,EAAA,CAAO,CAAEC,EAAGxK,CAAL,CACFqJ,EAAL,GACIkB,CAAAD,QADJ,CACmB,CADnB,CAGAd,EAAA,CAAYF,CAAA,CAAU,SAAV,CAAsB,MAAlC,CAAA,CAA0CiB,CAA1C,CAAgDnB,CAAhD,CAGA,KAAAM,SAAA,CAAgB,IAAAA,SAAhB,EAAiC,EACjC,KAAAA,SAAA1J,KAAA,CAAqBwJ,CA3CuB,CA3C7B,CA2GnBiB,UAAWA,QAAS,CAACjC,CAAD,CAAO3H,CAAP,CAAgBb,CAAhB,CAAsB,CAAA,IAElC2H,EADa8B,IACLnH,UAAAwF,OAAAH,MAF0B,CAGlCE,EAAaF,CAAAE,WAHqB,CAIlC+B,EAAWjC,CAAAiC,SAJuB,CAKlCtK,EACa,OAAT,GAAAkJ,CAAA,CALSiB,IAMLnH,UADJ,CALSmH,IAOLlH,QAR0B,CAUlCmI,EAASpL,CAAAqL,yBAAA,CAA+B9J,CAA/B,CAVyB,CAelCoF,CAfkC,CAgBlCC,CAICrF,EAAA8H,QAAL,GAMIiC,CA8CJ,CA/Ca,OAAb,GAAIpC,CAAJ,CACiB,CACThJ,EAAGQ,CAAA,CAAK,CAAL,CADM,CAETL,EAAGK,CAAA,CAAK,CAAL,CAFM,CADjB,CAMiB,CACTR,EAAGQ,CAAA,CAAKA,CAAAf,OAAL,CAAmB,CAAnB,CADM,CAETU,EAAGK,CAAA,CAAKA,CAAAf,OAAL,CAAmB,CAAnB,CAFM,CAyCjB,CAjCA4L,CAiCA,CAjCUvL,CAAAwL,mBAAA,CAAyBF,CAAzB,CAAqCF,CAArC,CAiCV,CAhCAK,CAgCA;AAhCezL,CAAA0L,gBAAA,CACXH,CADW,CAEXhK,CAAAoK,OAFW,CAGXP,CAHW,CAgCf,CArBAQ,CAqBA,CArBW,CAACL,CAqBZ,CArBsBxC,CAqBtB,CAnBIxH,CAAAoF,MAAJ,EAAqBpF,CAAAqF,OAArB,EACID,CACA,CADQpF,CAAAoF,MACR,CAAAC,CAAA,CAASrF,CAAAqF,OAFb,EAIID,CAJJ,CAIYC,CAJZ,CAIsC,CAJtC,CAIqBrF,CAAAoK,OAerB,CAvEiBxB,IA4DjBC,SAWA,CAvEiBD,IA4DKC,SAWtB,EAX6C,EAW7C,CAVAyB,CAUA,CAVM,CACF3L,EAAGuL,CAAAvL,EAAHA,CAAqByG,CAArBzG,CAA6B,CAD3B,CAEFG,EAAGoL,CAAApL,EAAHA,CAAqBuG,CAArBvG,CAA8B,CAF5B,CAGFsG,MAAOA,CAHL,CAIFC,OAAQA,CAJN,CAKFgF,SAAUA,CALR,CAMFE,gBAAiBL,CAAAvL,EANf,CAOF6L,gBAAiBN,CAAApL,EAPf,CAUN,CAvEiB8J,IAuEZC,SAAA,CAAoBlB,CAApB,CAAL,CAvEiBiB,IAgGbC,SAAA,CAAoBlB,CAApB,CAAAc,QAAA,CAAkC6B,CAAlC,CAzBJ,EAvEiB1B,IA0EbC,SAAA,CAAoBlB,CAApB,CASA,CAT4BoB,CAAAZ,OAAA,CACxBnI,CAAAmI,OADwB,CAAAc,SAAA,CAIpB,mCAJoB,CAIkBtB,CAJlB,CAIyB,SAJzB,CAAAuB,KAAA,CAMlBoB,CANkB,CAAAlB,IAAA,CAOnBpC,CAAA8B,MAPmB,CAS5B,CAAKC,CAAAP,WAAL,EAnFaI,IAoFTC,SAAA,CAAoBlB,CAApB,CAAAuB,KAAA,CAA+B,CAC3BuB,KAAMzK,CAAA0K,MAAND,EArFK7B,IAqFkBnH,UAAAiJ,MADI,CAE3BC,OAAQ3K,CAAA4K,UAFmB,CAG3B,eAAgB5K,CAAA4H,UAHW,CAI3B6B,QAAS,CAJkB,CAA/B,CAAAhB,QAAA,CAMa,CACLgB,QAAS,CADJ,CANb;AAQOhL,CAAAwI,OAAAjH,QAAAuI,UARP,CAbR,CApDA,CApBsC,CA3GvB,CA4NnBsC,QAASA,QAAS,CAAC7K,CAAD,CAAU,CAAA,IACpBgH,EAAa,IAAAA,WADO,CAEpBF,EAAQ,IAAAA,MAFY,CAGpBgE,EAAY9D,CAAApJ,WAAA,CAAsBoC,CAAA2H,KAAtB,CAHQ,CAIpB9G,EAAiBmG,CAAAnG,eAErB,IAAyB,UAAzB,GAAI,MAAOiK,EAAX,CACIjN,CAAAyJ,MAAA,CACI,GADJ,CACUtH,CAAA2H,KADV,CACyB,kCADzB,CADJ,KAuBA,OAfImD,EAAAxJ,kBAeG,EAf6BT,CAAAA,CAe7B,GAdHA,CASA,CARImG,CAAAnG,eAQJ,CAPImG,CAAA+D,kBAAA,CAA6B/K,CAA7B,CAOJ,CAHA8G,CAAA9G,QAAAqH,WAAA2D,gBAGA,CAH2ChL,CAAAgL,gBAG3C,CAAAhE,CAAAiE,qBAAA,CACIjE,CAAAkE,mBAAA,CAA8BrK,CAA9B,CAID,EAAAiK,CAAA,CAEH,IAAArJ,UAAAqI,yBAAA,CAAwC9J,CAAAkI,YAAxC,CAFG,CAIH,IAAAxG,QAAAoI,yBAAA,CAAsC9J,CAAAoI,UAAtC,CAJG,CAKHhB,CAAA,CAAM,CACFvG,eAAgBA,CADd;AAEFsK,cAAenE,CAAAmE,cAAfA,EAA2C,EAFzC,CAGF9G,gBAAiB2C,CAAAiE,qBAHf,CAIF5I,WAAY,CACRrE,KAAM,CADE,CAERa,KAAMiI,CAAAsE,UAFE,CAGRpM,KAAM,CAHE,CAIRD,KAAM+H,CAAAuE,WAJE,CAJV,CAUF/H,gBAAiB,CACbC,OAAQvD,CAAAgL,gBADK,CAVf,CAaFpK,gBAAiBoG,CAAAsE,2BAAA,CACbtL,CAAAkI,YADa,CAbf,CAAN,CAgBGlI,CAhBH,CALG,CA7BiB,CA5NT,CAuRnBuL,OAAQA,QAAS,EAAG,CAAA,IAEZ9J,EADamH,IACDnH,UAFA,CAGZwF,EAASxF,CAAAwF,OAHG,CAIZH,EAAQG,CAAAH,MAJI,CAKZE,EAAaF,CAAAE,WALD,CAQZhH,EAAUoH,CAAA,CACNN,CAAA9G,QAAAqH,WADM,CACoBJ,CAAAjH,QAAAqH,WADpB,CAEN5F,CAAAzB,QAAAqH,WAFM,CAPGuB,IASqB5I,QAFxB,CARE,CAYZsI,EAAU,EAGTxB,EAAA0B,WAAL,GACIF,CAAAqC,OAEA,CAFiB3K,CAAA4K,UAEjB,EAFsCnJ,CAAAiJ,MAEtC,CADApC,CAAA,CAAQ,cAAR,CACA,CAD0BtI,CAAA4H,UAC1B,CAAI5H,CAAAwL,UAAJ,GACIlD,CAAAmD,UADJ;AACwBzL,CAAAwL,UADxB,CAHJ,CAQAlD,EAAAoD,MAAA,CAAgB,oDAAhB,CAC0BjK,CAAAkK,WAC1B3L,EAAA,CAAUoH,CAAA,CAAMkB,CAAN,CAAetI,CAAf,CAGLuH,EAAA,CAAQvH,CAAA6H,OAAAuC,OAAR,CAAL,GACIpK,CAAA6H,OAAAuC,OADJ,CAC4B/L,CAAA,CAAIoB,CAAA,CACxBC,IAAAkM,KAAA,EAAW5L,CAAAgL,gBAAX,EAAsC,CAAtC,EAA2C,CAA3C,CADwB,CACwB,CADxB,CAC2B,CAD3B,CAAJ,CAErB,CAFqB,CAD5B,CAMAa,EAAA,CAjCiBjD,IAiCJiC,QAAA,CAAmB7K,CAAnB,CACbb,EAAA,CAAO0M,CAAA1M,KAIH0M,EAAA9N,UAAJ,GACIiJ,CAAAmE,cACA,CAD2BnE,CAAAmE,cAC3B,EADuD,EACvD,CAAAnE,CAAAmE,cAAA,CACInE,CAAAmE,cAAApH,OAAA,CAAgC8H,CAAA9N,UAAhC,CAHR,CAtCiB6K,KA6CjBP,WAAA,CAAsBlJ,CAAtB,CAA4BmJ,CAA5B,CAAqCrB,CAAAjH,QAAAuI,UAArC,CA7CiBK,KAgDjBgB,UAAA,CACI,OADJ,CAEIxC,CAAA,CAAMpH,CAAA6H,OAAN,CAAsB7H,CAAAkI,YAAtB,CAFJ,CAGI/I,CAHJ,CAhDiByJ,KAqDjBgB,UAAA,CACI,KADJ,CAEIxC,CAAA,CAAMpH,CAAA6H,OAAN,CAAsB7H,CAAAoI,UAAtB,CAFJ,CAGIjJ,CAHJ,CAtDgB,CAvRD,CAyVnB2M,QAASA,QAAS,EAAG,CACb,IAAAjD,SAAJ,GACIhL,CAAAkO,WAAA,CAAa,IAAAlD,SAAb;AAA4B,QAAS,CAACmD,CAAD,CAAM,CACvCA,CAAAF,QAAA,EADuC,CAA3C,CAGA,CAAA,OAAO,IAAAjD,SAJX,CADiB,CAzVF,CAiXvBhC,EAAAlC,UAAA,CAAuB,CAMnB/G,WAAYqH,CANO,CAgBnB2B,KAAMA,QAAS,CAACE,CAAD,CAAQ,CAEnB,IAAAA,MAAA,CAAaA,CAGb,KAAAmF,YAAA,CAAmB,EAGnBxE,EAAA,CAASX,CAAT,CAAgB,QAAhB,CAA0B,QAAS,EAAG,CAClC,IAAAE,WAAAkF,OAAA,EADkC,CAAtC,CARmB,CAhBJ,CAsCnBA,OAAQA,QAAS,CAACC,CAAD,CAAc,CAAA,IACvBrF,EAAQ,IAAAA,MADe,CAEvBE,EAAa,IAFU,CAGvBoF,EAAiBpF,CAAAiF,YAGrBjF,EAAAiF,YAAA,CAAyB,EACzBnF,EAAAG,OAAAoF,QAAA,CAAqB,QAAS,CAACpF,CAAD,CAAS,CAC/BA,CAAAqF,QAAJ,EACIrF,CAAAsF,OAAAF,QAAA,CAAsB,QAAS,CAAC5N,CAAD,CAAQ,CAAA,IAC/B2B,CAD+B,CAE/BoM,EACI/N,CAAAuB,QADJwM,EAEI/N,CAAAuB,QAAAyM,QAFJD,EAGI3O,CAAA6O,MAAA,CAAQjO,CAAAuB,QAAAyM,QAAR,CAGJhO,EAAA6N,QAAJ,EAAwC,CAAA,CAAxC,GAAqB7N,CAAAkO,SAArB,EAAiDH,CAAjD,EACIA,CAAAH,QAAA,CAAiB,QAAS,CAACI,CAAD,CAAU,CAChCrM,CAAA,CAAK0G,CAAA8F,IAAA,CACkB,QAAnB,GAAA,MAAOH,EAAP,CACIA,CADJ,CACcA,CAAArM,GAFb,CAKDA,EADJ,WACkBvC,EAAAgP,MADlB,EAEIzM,CAAA6G,OAAAqF,QAFJ;AAGIlM,CAAAkM,QAHJ,EAIoB,CAAA,CAJpB,GAIIlM,CAAAuM,SAJJ,EAOI3F,CAAAiF,YAAA7M,KAAA,CAA4B,IAAIuH,CAAJ,CACxBlI,CADwB,CAExB2B,CAFwB,CAGL,QAAnB,GAAA,MAAOqM,EAAP,CAA8B,EAA9B,CAAmCA,CAHX,CAA5B,CAZ4B,CAApC,CAT+B,CAAvC,CAF+B,CAAvC,CAqCA,KA5C2B,IA6CnB5G,EAAI,CA7Ce,CA6CZiH,CA7CY,CA6CTC,CA7CS,CA6CFC,EAASZ,CAAAhO,OA7CP,CA8CnB6O,EAASjG,CAAAiF,YAAA7N,OAFjB,CAGIyH,CAHJ,CAGQmH,CAHR,CAII,EAAEnH,CAJN,CAKE,CACEkH,CAAA,CAAQ,CAAA,CACR,KAAKD,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBG,CAAhB,CAAwB,EAAEH,CAA1B,CACI,GACIV,CAAA,CAAevG,CAAf,CAAApE,UADJ,GAEQuF,CAAAiF,YAAA,CAAuBa,CAAvB,CAAArL,UAFR,EAGI2K,CAAA,CAAevG,CAAf,CAAAnE,QAHJ,GAIQsF,CAAAiF,YAAA,CAAuBa,CAAvB,CAAApL,QAJR,CAKE,CACEsF,CAAAiF,YAAA,CAAuBa,CAAvB,CAAAjE,SAAA,CACIuD,CAAA,CAAevG,CAAf,CAAAgD,SACJkE,EAAA,CAAQ,CAAA,CACR,MAJF,CAODA,CAAL,EACIX,CAAA,CAAevG,CAAf,CAAAiG,QAAA,EAhBN,CAuBF,OAAO,IAAAjL,eACP,QAAO,IAAAsK,cAGPnE,EAAAkG,kBAAA,CAA6Bf,CAA7B,CA5E2B,CAtCZ,CA8HnBe,kBAAmBA,QAAS,CAACf,CAAD,CAAc,CAClCA,CAAJ,CAEI,IAAArF,MAAAG,OAAAoF,QAAA,CAA0B,QAAS,CAACpF,CAAD,CAAS,CACxC,IAAIsE,EAASA,QAAS,EAAG,CAAA,IAGjBvE,EAAaC,CAAAH,MAAAE,WAGjBqF;CAFYrF,CAEZqF,EAF0BrF,CAAAiF,YAE1BI,EAFoD,EAEpDA,SAAA,CAAc,QAAS,CAACzD,CAAD,CAAa,CAE5BA,CAAAnH,UADJ,EAEImH,CAAAnH,UAAAwF,OAFJ,GAEoCA,CAFpC,EAII2B,CAAA2C,OAAA,EAL4B,CAApC,CAQItE,EAAAkG,4BAAJ,GACIlG,CAAAkG,4BAAA,EACA,CAAA,OAAOlG,CAAAkG,4BAFX,CAdqB,CAoBQ,EAAA,CAAjC,GAAIlG,CAAAjH,QAAAuI,UAAJ,CACIgD,CAAA,EADJ,CAGItE,CAAAkG,4BAHJ,CAGyC1F,CAAA,CACjCR,CADiC,CACzB,cADyB,CACTsE,CADS,CAxBD,CAA5C,CAFJ,CAiCI,IAAAU,YAAAI,QAAA,CAAyB,QAAS,CAACzD,CAAD,CAAa,CAC3CA,CAAA2C,OAAA,EAD2C,CAA/C,CAlCkC,CA9HvB,CAoLnBR,kBAAmBA,QAAS,CAAC/K,CAAD,CAAU,CAMlC,IANkC,IAC9BjC,EAAY,EADkB,CAE9BkJ,EAAS,IAAAH,MAAAG,OAFqB,CAG9B1D,EAAS3D,CAAA,CAAKI,CAAAgL,gBAAL,CAA8B,CAA9B,CAHqB,CAI9BoC,CAJ8B,CAMzB1O,EAAI,CANqB,CAMlB2O,EAAOpG,CAAA7I,OAAvB,CAAsCM,CAAtC,CAA0C2O,CAA1C,CAAgD,EAAE3O,CAAlD,CACI,GAAIuI,CAAA,CAAOvI,CAAP,CAAA4N,QAAJ,CACI,IADmB,IAEXzG,EAAI,CAFO,CAEJyH,EAAOrG,CAAA,CAAOvI,CAAP,CAAA6N,OAAAnO,OAFH,CAE4BkH,CAD/C,CAEIO,CAFJ,CAEQyH,CAFR,CAGI,EAAEzH,CAHN,CAKIpH,CACA;AADQwI,CAAA,CAAOvI,CAAP,CAAA6N,OAAA,CAAiB1G,CAAjB,CACR,CAAIpH,CAAA6N,QAAJ,GACIhH,CADJ,CACSJ,CAAA,CAAWzG,CAAX,CADT,GAGQV,CAAAqB,KAAA,CAAe,CACXpB,KAAMsH,CAAAtH,KAANA,CAAgBuF,CADL,CAEX1E,KAAMyG,CAAAzG,KAANA,CAAgB0E,CAFL,CAGXvE,KAAMsG,CAAAtG,KAANA,CAAgBuE,CAHL,CAIXxE,KAAMuG,CAAAvG,KAANA,CAAgBwE,CAJL,CAAf,CAapBxF,EAAA,CAAYA,CAAA2I,KAAA,CAAe,QAAS,CAACT,CAAD,CAAIC,CAAJ,CAAO,CACvC,MAAOD,EAAAjI,KAAP,CAAgBkI,CAAAlI,KADuB,CAA/B,CAKPuJ,EAAA,CAAQvH,CAAAgL,gBAAR,CAAL,GACIoC,CAGA,CAFIpN,CAAAgL,gBAEJ,CADIrF,CAAA,CAAwB5H,CAAxB,CACJ,CAAAA,CAAAsO,QAAA,CAAkB,QAAS,CAACzN,CAAD,CAAW,CAClCA,CAAAZ,KAAA,EAAiBoP,CACjBxO,EAAAC,KAAA,EAAiBuO,CACjBxO,EAAAI,KAAA,EAAiBoO,CACjBxO,EAAAG,KAAA,EAAiBqO,CAJiB,CAAtC,CAJJ,CAYA,OAAOrP,EA/C2B,CApLnB,CAoPnBmN,mBAAoBA,QAAS,CAACnN,CAAD,CAAY,CAOrC,IAPqC,IACjCuG,EAAW,CADsB,CAEjCC,EAAY,CAFqB,CAGjCa,CAHiC,CAIjCC,CAJiC,CAKjC3G,EAAIX,CAAAK,OAER,CAAOM,CAAA,EAAP,CAAA,CACI0G,CAKA,CALQrH,CAAA,CAAUW,CAAV,CAAAG,KAKR,CAL4Bd,CAAA,CAAUW,CAAV,CAAAV,KAK5B,CAJAqH,CAIA,CAJStH,CAAA,CAAUW,CAAV,CAAAK,KAIT,CAJ6BhB,CAAA,CAAUW,CAAV,CAAAM,KAI7B,CAHIsF,CAGJ,CAHec,CAGf,GAFId,CAEJ,CAFec,CAEf,EAAIb,CAAJ,CAAgBc,CAAhB,GACId,CADJ,CACgBc,CADhB,CAKJ,OAAO,CACHd,UAAWA,CADR,CAEHD,SAAUA,CAFP,CAlB8B,CApPtB,CAwRnBgH,2BAA4BA,QAAS,CAACiC,CAAD,CAAgB,CAAA,IAG7CC,EAA0C,KAA1CA,GAAUD,CAAAvF,cAAVwF;AAC4C,QAD5CA,GACYD,CAAAvF,cAGhB,OANsC,MAM/B,GANOuF,CAAAxF,MAMP,EALiC,OAKjC,GALSwF,CAAAxF,MAKT,CACFyF,CAAA,CAHDC,IAAAA,EAGC,CAAkB,CAAA,CADhB,CAEFD,CAAA,CAAU,CAAA,CAAV,CAJDC,IAAAA,EAL6C,CAxRlC,CAsSvB5P,EAAA8I,WAAA,CAAeA,CACf9I,EAAAgJ,WAAA,CAAeA,CAIf9G,EAAA,CAAOlC,CAAAgP,MAAAlI,UAAP,CAAwD,CAepDmF,yBAA0BA,QAAS,CAACyD,CAAD,CAAgB,CAAA,IAC3CjI,EAAKJ,CAAA,CAAW,IAAX,CADsC,CAE3CvG,CAF2C,CAG3CG,CAEJ,QAAQyO,CAAAxF,MAAR,EACA,KAAK,OAAL,CACIpJ,CAAA,CAAI,MACJ,MACJ,MAAK,MAAL,CACIA,CAAA,CAAI,MALR,CAQA,OAAQ4O,CAAAvF,cAAR,EACA,KAAK,KAAL,CACIlJ,CAAA,CAAI,MACJ,MACJ,MAAK,QAAL,CACIA,CAAA,CAAI,MALR,CAQA,MAAO,CACHH,EAAGA,CAAA,CAAI2G,CAAA,CAAG3G,CAAH,CAAJ,EAAa2G,CAAAtH,KAAb,CAAuBsH,CAAAzG,KAAvB,EAAkC,CADlC,CAEHC,EAAGA,CAAA,CAAIwG,CAAA,CAAGxG,CAAH,CAAJ,EAAawG,CAAAtG,KAAb,CAAuBsG,CAAAvG,KAAvB,EAAkC,CAFlC,CArBwC,CAfC,CAyDpDkL,mBAAoBA,QAAS,CAACyD,CAAD,CAAKC,CAAL,CAAS,CAG7BpG,CAAA,CAAQoG,CAAR,CAAL,GACIrD,CACA,CADMpF,CAAA,CAAW,IAAX,CACN,CAAAyI,CAAA,CAAK,CACDhP,GAAI2L,CAAAtM,KAAJW,CAAe2L,CAAAzL,KAAfF,EAA2B,CAD1B,CAEDG,GAAIwL,CAAAtL,KAAJF,CAAewL,CAAAvL,KAAfD,EAA2B,CAF1B,CAFT,CAOA,OAAOY,KAAAkO,MAAA,CAAWD,CAAA7O,EAAX;AAAkB4O,CAAA5O,EAAlB,CAAwB4O,CAAA/O,EAAxB,CAA+BgP,CAAAhP,EAA/B,CAV2B,CAzDc,CA2FpDwL,gBAAiBA,QAAS,CAACH,CAAD,CAAU6D,CAAV,CAAwBhE,CAAxB,CAAgC,CAqBtD,IArBsD,IAClDiE,EAAkB,CAAlBA,CAAQpO,IAAAqO,GAD0C,CAGlDzI,EAAKJ,CAAA,CAAW,IAAX,CAH6C,CAIlD8I,EAAY1I,CAAAzG,KAAZmP,CAAsB1I,CAAAtH,KAJ4B,CAKlDiQ,EAAa3I,CAAAvG,KAAbkP,CAAuB3I,CAAAtG,KAL2B,CAMlDkP,EAAQxO,IAAAkO,MAAA,CAAWK,CAAX,CAAuBD,CAAvB,CAN0C,CAQlDG,EAAoB,CAAA,CAR8B,CASlDC,EAAgBJ,CAAhBI,CAA4B,CATsB,CAUlDC,EAAiBJ,CAAjBI,CAA8B,CAVoB,CAWlDC,EAAuBhJ,CAAAtH,KAAvBsQ,CAAiCF,CAXiB,CAYlDG,EAAqBjJ,CAAAtG,KAArBuP,CAA+BF,CAZmB,CAc3CC,EAAAA,CAd2C,CAe3CC,EAAAA,CAf2C,CAiBlDC,EAAc,EAjBoC,CAkBlDC,EAAU,CAlBwC,CAmBlDC,EAAU,CAEd,CAAOC,CAAP,CAAe,CAACjP,IAAAqO,GAAhB,CAAA,CACIY,CAAA,EAASb,CAGb,KAAA,CAAOa,CAAP,CAAejP,IAAAqO,GAAf,CAAA,CACIY,CAAA,EAASb,CAGbc,EAAA,CAAWlP,IAAAmP,IAAA,CAASF,CAAT,CAENA,EAAL,CAAa,CAACT,CAAd,EAAyBS,CAAzB,EAAkCT,CAAlC,EAEIQ,CACA,CADW,EACX,CAAAP,CAAA,CAAoB,CAAA,CAHxB,EAIWQ,CAAJ,CAAYT,CAAZ,EAAqBS,CAArB,EAA+BjP,IAAAqO,GAA/B,CAAyCG,CAAzC,CAEHQ,CAFG,CAEQ,EAFR,CAGIC,CAAJ,CAAajP,IAAAqO,GAAb,CAAuBG,CAAvB,EAAiCS,CAAjC,EAA0C,EAAEjP,IAAAqO,GAAF,CAAYG,CAAZ,CAA1C,EAEHO,CACA,CADW,EACX,CAAAN,CAAA,CAAoB,CAAA,CAHjB,EAMHM,CANG,CAMQ,EAIXN,EAAJ,EACIxP,CACA,EADe8P,CACf,CAD0BL,CAC1B,CAAAtP,CAAA,EAAe4P,CAAf,CAA0BN,CAA1B,CAA2CQ,CAF/C,GAIIjQ,CACA,EAD0BsP,CAC1B,EADwC,CACxC,CAD8CW,CAC9C,EADeH,CACf,CAAA3P,CAAA,EAAe4P,CAAf,CAA0BL,CAL9B,CAQIxE,EAAAlL,EAAJ,GAAiB2P,CAAjB,GACI3P,CADJ,CACkBkL,CAAAlL,EADlB,CAGIkL,EAAA/K,EAAJ,GAAiByP,CAAjB,GACIzP,CADJ,CACkB+K,CAAA/K,EADlB,CAIA0P,EAAA7P,EAAA,CAAgBA,CAAhB,CAA+BkP,CAA/B,CAA8CnO,IAAAoP,IAAA,CAASH,CAAT,CAC9CH,EAAA1P,EAAA,CAAgBA,CAAhB,CAA+B+O,CAA/B,CAA8CnO,IAAAqP,IAAA,CAASJ,CAAT,CAE9C,OAAOH,EAlE+C,CA3FN,CAAxD,CAgMA3Q,EAAAmR,MAAArK,UAAAsK,UAAA7P,KAAA,CAAiC,QAAS,CAAC0H,CAAD,CAAQ,CAGX,CAAA,CAAnC;AAFcA,CAAA9G,QAEVqH,WAAAS,QAAJ,GACIf,CAAA,CAAWD,CAAX,CAEA,CADA,IAAAE,WACA,CADkB,IAAIH,CAAJ,CAAe,IAAf,CAClB,CAAA,IAAAG,WAAAkF,OAAA,CAAuB,CAAA,CAAvB,CAHJ,CAH8C,CAAlD,CApwCgC,CAAnC,CAAA,CA8wCCxO,CA9wCD,CA8wCaE,CA9wCb,CAx/BmB,CAXvB;","sources":["pathfinder.src.js"],"names":["factory","module","exports","define","amd","Highcharts","undefined","algorithms","H","findLastObstacleBefore","obstacles","xMin","startIx","left","right","length","min","cursor","cmp","findObstacleFromPoint","point","i","x","obstacle","xMax","y","yMax","yMin","pathFromSegments","segments","path","push","start","end","limitObstacleToBounds","bounds","max","Math","abs","pick","straight","simpleConnect","extend","options","copyFromPoint","from","fromKey","to","toKey","offset","getMeOut","direction","useMax","endSegment","dir","startDirectionX","chartObstacles","startObstacleIx","endObstacleIx","endPoint","endObstacle","waypoint","startObstacle","prevWaypoint","waypoint2","requiresObstacles","fastAvoid","pivotPoint","fromPoint","toPoint","directionIsX","firstPoint","lastPoint","highestPoint","lowestPoint","searchDirection","getDodgeDirection","dirIsX","softBounds","soft","hardBounds","hard","toPointMax","toPointMin","maxOutOfSoftBounds","minOutOfSoftBounds","maxOutOfHardBounds","minOutOfHardBounds","minDistance","maxDistance","minPivot","maxPivot","clearPathTo","envelopingObstacle","secondEnvelopingObstacle","envelopWaypoint","obstacleMargin","obstacleOptions","margin","softMinX","softMaxX","softMinY","softMaxY","waypointUseMax","forceObstacleBreak","pivot","concat","extractFromObstacle","goalPoint","extractedEndPoint","endSegments","metrics","obstacleMetrics","maxWidth","maxHeight","slice","reverse","SVGRenderer","prototype","symbols","arrow","H.SVGRenderer.prototype.symbols.arrow","w","h","pathfinderAlgorithms","getPointBB","shapeArgs","width","height","bb","graphic","getBBox","plotX","plotY","calculateObstacleMargin","len","j","obstacleDistance","distances","distance","a","b","bbMargin","yOverlap","xOverlap","xDistance","Infinity","yDistance","floor","sort","Connection","init","Pathfinder","chart","warnLegacy","pathfinder","series","reduce","acc","merge","connectors","error","defined","deg2rad","addEvent","defaultOptions","type","lineWidth","marker","enabled","align","verticalAlign","inside","startMarker","symbol","endMarker","renderPath","attribs","animation","styledMode","animate","forExport","pathGraphic","connection","graphics","group","renderer","g","addClass","attr","zIndex","add","seriesGroup","translate","plotLeft","plotTop","opacity","anim","d","addMarker","anchor","getPathfinderAnchorPoint","pathVector","radians","getRadiansToVector","markerVector","getMarkerVector","radius","rotation","box","rotationOriginX","rotationOriginY","fill","color","stroke","lineColor","getPath","algorithm","getChartObstacles","algorithmMargin","chartObstacleMetrics","getObstacleMetrics","lineObstacles","plotWidth","plotHeight","getAlgorithmStartDirection","render","dashStyle","dashstyle","class","colorIndex","ceil","pathResult","destroy","objectEach","val","connections","update","deferRender","oldConnections","forEach","visible","points","connects","connect","splat","isInside","get","Point","k","found","lenOld","lenNew","renderConnections","pathfinderRemoveRenderEvent","calculatedMargin","sLen","pLen","markerOptions","yCenter","undef","v1","v2","atan2","markerRadius","twoPI","PI","rectWidth","rectHeight","rAtan","leftOrRightRegion","rectHalfWidth","rectHalfHeight","rectHorizontalCenter","rectVerticalCenter","markerPoint","xFactor","yFactor","theta","tanTheta","tan","cos","sin","Chart","callbacks"]}
@@ -0,0 +1,2336 @@
1
+ /**
2
+ * @license Highcharts JS v7.0.3 (2019-02-06)
3
+ * Pathfinder
4
+ *
5
+ * (c) 2016-2019 Øystein Moseng
6
+ *
7
+ * License: www.highcharts.com/license
8
+ */
9
+ 'use strict';
10
+ (function (factory) {
11
+ if (typeof module === 'object' && module.exports) {
12
+ factory['default'] = factory;
13
+ module.exports = factory;
14
+ } else if (typeof define === 'function' && define.amd) {
15
+ define(function () {
16
+ return factory;
17
+ });
18
+ } else {
19
+ factory(typeof Highcharts !== 'undefined' ? Highcharts : undefined);
20
+ }
21
+ }(function (Highcharts) {
22
+ var algorithms = (function (H) {
23
+ /* *
24
+ * (c) 2016 Highsoft AS
25
+ * Author: Øystein Moseng
26
+ *
27
+ * License: www.highcharts.com/license
28
+ */
29
+
30
+
31
+
32
+ var min = Math.min,
33
+ max = Math.max,
34
+ abs = Math.abs,
35
+ pick = H.pick;
36
+
37
+ /**
38
+ * Get index of last obstacle before xMin. Employs a type of binary search, and
39
+ * thus requires that obstacles are sorted by xMin value.
40
+ *
41
+ * @private
42
+ * @function findLastObstacleBefore
43
+ *
44
+ * @param {Array<object>} obstacles
45
+ * Array of obstacles to search in.
46
+ *
47
+ * @param {number} xMin
48
+ * The xMin threshold.
49
+ *
50
+ * @param {number} startIx
51
+ * Starting index to search from. Must be within array range.
52
+ *
53
+ * @return {number}
54
+ * The index of the last obstacle element before xMin.
55
+ */
56
+ function findLastObstacleBefore(obstacles, xMin, startIx) {
57
+ var left = startIx || 0, // left limit
58
+ right = obstacles.length - 1, // right limit
59
+ min = xMin - 0.0000001, // Make sure we include all obstacles at xMin
60
+ cursor,
61
+ cmp;
62
+
63
+ while (left <= right) {
64
+ cursor = (right + left) >> 1;
65
+ cmp = min - obstacles[cursor].xMin;
66
+ if (cmp > 0) {
67
+ left = cursor + 1;
68
+ } else if (cmp < 0) {
69
+ right = cursor - 1;
70
+ } else {
71
+ return cursor;
72
+ }
73
+ }
74
+ return left > 0 ? left - 1 : 0;
75
+ }
76
+
77
+ /**
78
+ * Test if a point lays within an obstacle.
79
+ *
80
+ * @private
81
+ * @function pointWithinObstacle
82
+ *
83
+ * @param {object} obstacle
84
+ * Obstacle to test.
85
+ *
86
+ * @param {Highcharts.Point} point
87
+ * Point with x/y props.
88
+ *
89
+ * @return {boolean}
90
+ * Whether point is within the obstacle or not.
91
+ */
92
+ function pointWithinObstacle(obstacle, point) {
93
+ return (
94
+ point.x <= obstacle.xMax &&
95
+ point.x >= obstacle.xMin &&
96
+ point.y <= obstacle.yMax &&
97
+ point.y >= obstacle.yMin
98
+ );
99
+ }
100
+
101
+ /**
102
+ * Find the index of an obstacle that wraps around a point.
103
+ * Returns -1 if not found.
104
+ *
105
+ * @private
106
+ * @function findObstacleFromPoint
107
+ *
108
+ * @param {Array<object>} obstacles
109
+ * Obstacles to test.
110
+ *
111
+ * @param {Highcharts.Point} point
112
+ * Point with x/y props.
113
+ *
114
+ * @return {number}
115
+ * Ix of the obstacle in the array, or -1 if not found.
116
+ */
117
+ function findObstacleFromPoint(obstacles, point) {
118
+ var i = findLastObstacleBefore(obstacles, point.x + 1) + 1;
119
+
120
+ while (i--) {
121
+ if (obstacles[i].xMax >= point.x &&
122
+ // optimization using lazy evaluation
123
+ pointWithinObstacle(obstacles[i], point)) {
124
+ return i;
125
+ }
126
+ }
127
+ return -1;
128
+ }
129
+
130
+ /**
131
+ * Get SVG path array from array of line segments.
132
+ *
133
+ * @private
134
+ * @function pathFromSegments
135
+ *
136
+ * @param {Array<object>} segments
137
+ * The segments to build the path from.
138
+ *
139
+ * @return {Highcharts.SVGPathArray}
140
+ * SVG path array as accepted by the SVG Renderer.
141
+ */
142
+ function pathFromSegments(segments) {
143
+ var path = [];
144
+
145
+ if (segments.length) {
146
+ path.push('M', segments[0].start.x, segments[0].start.y);
147
+ for (var i = 0; i < segments.length; ++i) {
148
+ path.push('L', segments[i].end.x, segments[i].end.y);
149
+ }
150
+ }
151
+ return path;
152
+ }
153
+
154
+ /**
155
+ * Limits obstacle max/mins in all directions to bounds. Modifies input
156
+ * obstacle.
157
+ *
158
+ * @private
159
+ * @function limitObstacleToBounds
160
+ *
161
+ * @param {object} obstacle
162
+ * Obstacle to limit.
163
+ *
164
+ * @param {object} bounds
165
+ * Bounds to use as limit.
166
+ */
167
+ function limitObstacleToBounds(obstacle, bounds) {
168
+ obstacle.yMin = max(obstacle.yMin, bounds.yMin);
169
+ obstacle.yMax = min(obstacle.yMax, bounds.yMax);
170
+ obstacle.xMin = max(obstacle.xMin, bounds.xMin);
171
+ obstacle.xMax = min(obstacle.xMax, bounds.xMax);
172
+ }
173
+
174
+
175
+ // Define the available pathfinding algorithms.
176
+ // Algorithms take up to 3 arguments: starting point, ending point, and an
177
+ // options object.
178
+ var algorithms = {
179
+
180
+ /**
181
+ * Get an SVG path from a starting coordinate to an ending coordinate.
182
+ * Draws a straight line.
183
+ *
184
+ * @function Highcharts.Pathfinder.algorithms.straight
185
+ *
186
+ * @param {object} start
187
+ * Starting coordinate, object with x/y props.
188
+ *
189
+ * @param {object} end
190
+ * Ending coordinate, object with x/y props.
191
+ *
192
+ * @return {object}
193
+ * An object with the SVG path in Array form as accepted by the SVG
194
+ * renderer, as well as an array of new obstacles making up this
195
+ * path.
196
+ */
197
+ straight: function (start, end) {
198
+ return {
199
+ path: ['M', start.x, start.y, 'L', end.x, end.y],
200
+ obstacles: [{ start: start, end: end }]
201
+ };
202
+ },
203
+
204
+ /**
205
+ * Find a path from a starting coordinate to an ending coordinate, using
206
+ * right angles only, and taking only starting/ending obstacle into
207
+ * consideration.
208
+ *
209
+ * @function Highcharts.Pathfinder.algorithms.simpleConnect
210
+ *
211
+ * @param {object} start
212
+ * Starting coordinate, object with x/y props.
213
+ *
214
+ * @param {object} end
215
+ * Ending coordinate, object with x/y props.
216
+ *
217
+ * @param {object} options
218
+ * Options for the algorithm:
219
+ * - chartObstacles: Array of chart obstacles to avoid
220
+ * - startDirectionX: Optional. True if starting in the X direction.
221
+ * If not provided, the algorithm starts in the direction that is
222
+ * the furthest between start/end.
223
+ *
224
+ * @return {object}
225
+ * An object with the SVG path in Array form as accepted by the SVG
226
+ * renderer, as well as an array of new obstacles making up this
227
+ * path.
228
+ */
229
+ simpleConnect: H.extend(function (start, end, options) {
230
+ var segments = [],
231
+ endSegment,
232
+ dir = pick(
233
+ options.startDirectionX,
234
+ abs(end.x - start.x) > abs(end.y - start.y)
235
+ ) ? 'x' : 'y',
236
+ chartObstacles = options.chartObstacles,
237
+ startObstacleIx = findObstacleFromPoint(chartObstacles, start),
238
+ endObstacleIx = findObstacleFromPoint(chartObstacles, end),
239
+ startObstacle,
240
+ endObstacle,
241
+ prevWaypoint,
242
+ waypoint,
243
+ waypoint2,
244
+ useMax,
245
+ endPoint;
246
+
247
+ // Return a clone of a point with a property set from a target object,
248
+ // optionally with an offset
249
+ function copyFromPoint(from, fromKey, to, toKey, offset) {
250
+ var point = {
251
+ x: from.x,
252
+ y: from.y
253
+ };
254
+
255
+ point[fromKey] = to[toKey || fromKey] + (offset || 0);
256
+ return point;
257
+ }
258
+
259
+ // Return waypoint outside obstacle
260
+ function getMeOut(obstacle, point, direction) {
261
+ var useMax = abs(point[direction] - obstacle[direction + 'Min']) >
262
+ abs(point[direction] - obstacle[direction + 'Max']);
263
+
264
+ return copyFromPoint(
265
+ point,
266
+ direction,
267
+ obstacle,
268
+ direction + (useMax ? 'Max' : 'Min'),
269
+ useMax ? 1 : -1
270
+ );
271
+ }
272
+
273
+ // Pull out end point
274
+ if (endObstacleIx > -1) {
275
+ endObstacle = chartObstacles[endObstacleIx];
276
+ waypoint = getMeOut(endObstacle, end, dir);
277
+ endSegment = {
278
+ start: waypoint,
279
+ end: end
280
+ };
281
+ endPoint = waypoint;
282
+ } else {
283
+ endPoint = end;
284
+ }
285
+
286
+ // If an obstacle envelops the start point, add a segment to get out,
287
+ // and around it.
288
+ if (startObstacleIx > -1) {
289
+ startObstacle = chartObstacles[startObstacleIx];
290
+ waypoint = getMeOut(startObstacle, start, dir);
291
+ segments.push({
292
+ start: start,
293
+ end: waypoint
294
+ });
295
+
296
+ // If we are going back again, switch direction to get around start
297
+ // obstacle.
298
+ if (
299
+ waypoint[dir] > start[dir] === // Going towards max from start
300
+ waypoint[dir] > endPoint[dir] // Going towards min to end
301
+ ) {
302
+ dir = dir === 'y' ? 'x' : 'y';
303
+ useMax = start[dir] < end[dir];
304
+ segments.push({
305
+ start: waypoint,
306
+ end: copyFromPoint(
307
+ waypoint,
308
+ dir,
309
+ startObstacle,
310
+ dir + (useMax ? 'Max' : 'Min'),
311
+ useMax ? 1 : -1
312
+ )
313
+ });
314
+
315
+ // Switch direction again
316
+ dir = dir === 'y' ? 'x' : 'y';
317
+ }
318
+ }
319
+
320
+ // We are around the start obstacle. Go towards the end in one
321
+ // direction.
322
+ prevWaypoint = segments.length ?
323
+ segments[segments.length - 1].end :
324
+ start;
325
+ waypoint = copyFromPoint(prevWaypoint, dir, endPoint);
326
+ segments.push({
327
+ start: prevWaypoint,
328
+ end: waypoint
329
+ });
330
+
331
+ // Final run to end point in the other direction
332
+ dir = dir === 'y' ? 'x' : 'y';
333
+ waypoint2 = copyFromPoint(waypoint, dir, endPoint);
334
+ segments.push({
335
+ start: waypoint,
336
+ end: waypoint2
337
+ });
338
+
339
+ // Finally add the endSegment
340
+ segments.push(endSegment);
341
+
342
+ return {
343
+ path: pathFromSegments(segments),
344
+ obstacles: segments
345
+ };
346
+ }, {
347
+ requiresObstacles: true
348
+ }),
349
+
350
+ /**
351
+ * Find a path from a starting coordinate to an ending coordinate, taking
352
+ * obstacles into consideration. Might not always find the optimal path,
353
+ * but is fast, and usually good enough.
354
+ *
355
+ * @function Highcharts.Pathfinder.algorithms.fastAvoid
356
+ *
357
+ * @param {object} start
358
+ * Starting coordinate, object with x/y props.
359
+ *
360
+ * @param {object} end
361
+ * Ending coordinate, object with x/y props.
362
+ *
363
+ * @param {object} options
364
+ * Options for the algorithm.
365
+ * - chartObstacles: Array of chart obstacles to avoid
366
+ * - lineObstacles: Array of line obstacles to jump over
367
+ * - obstacleMetrics: Object with metrics of chartObstacles cached
368
+ * - hardBounds: Hard boundaries to not cross
369
+ * - obstacleOptions: Options for the obstacles, including margin
370
+ * - startDirectionX: Optional. True if starting in the X direction.
371
+ * If not provided, the algorithm starts in the
372
+ * direction that is the furthest between
373
+ * start/end.
374
+ *
375
+ * @return {object}
376
+ * An object with the SVG path in Array form as accepted by the SVG
377
+ * renderer, as well as an array of new obstacles making up this
378
+ * path.
379
+ */
380
+ fastAvoid: H.extend(function (start, end, options) {
381
+ /*
382
+ Algorithm rules/description
383
+ - Find initial direction
384
+ - Determine soft/hard max for each direction.
385
+ - Move along initial direction until obstacle.
386
+ - Change direction.
387
+ - If hitting obstacle, first try to change length of previous line
388
+ before changing direction again.
389
+
390
+ Soft min/max x = start/destination x +/- widest obstacle + margin
391
+ Soft min/max y = start/destination y +/- tallest obstacle + margin
392
+
393
+ @todo:
394
+ - Make retrospective, try changing prev segment to reduce
395
+ corners
396
+ - Fix logic for breaking out of end-points - not always picking
397
+ the best direction currently
398
+ - When going around the end obstacle we should not always go the
399
+ shortest route, rather pick the one closer to the end point
400
+ */
401
+ var dirIsX = pick(
402
+ options.startDirectionX,
403
+ abs(end.x - start.x) > abs(end.y - start.y)
404
+ ),
405
+ dir = dirIsX ? 'x' : 'y',
406
+ segments,
407
+ useMax,
408
+ extractedEndPoint,
409
+ endSegments = [],
410
+ forceObstacleBreak = false, // Used in clearPathTo to keep track of
411
+ // when to force break through an obstacle.
412
+
413
+ // Boundaries to stay within. If beyond soft boundary, prefer to
414
+ // change direction ASAP. If at hard max, always change immediately.
415
+ metrics = options.obstacleMetrics,
416
+ softMinX = min(start.x, end.x) - metrics.maxWidth - 10,
417
+ softMaxX = max(start.x, end.x) + metrics.maxWidth + 10,
418
+ softMinY = min(start.y, end.y) - metrics.maxHeight - 10,
419
+ softMaxY = max(start.y, end.y) + metrics.maxHeight + 10,
420
+
421
+ // Obstacles
422
+ chartObstacles = options.chartObstacles,
423
+ startObstacleIx = findLastObstacleBefore(chartObstacles, softMinX),
424
+ endObstacleIx = findLastObstacleBefore(chartObstacles, softMaxX);
425
+
426
+ // How far can you go between two points before hitting an obstacle?
427
+ // Does not work for diagonal lines (because it doesn't have to).
428
+ function pivotPoint(fromPoint, toPoint, directionIsX) {
429
+ var firstPoint,
430
+ lastPoint,
431
+ highestPoint,
432
+ lowestPoint,
433
+ i,
434
+ searchDirection = fromPoint.x < toPoint.x ? 1 : -1;
435
+
436
+ if (fromPoint.x < toPoint.x) {
437
+ firstPoint = fromPoint;
438
+ lastPoint = toPoint;
439
+ } else {
440
+ firstPoint = toPoint;
441
+ lastPoint = fromPoint;
442
+ }
443
+
444
+ if (fromPoint.y < toPoint.y) {
445
+ lowestPoint = fromPoint;
446
+ highestPoint = toPoint;
447
+ } else {
448
+ lowestPoint = toPoint;
449
+ highestPoint = fromPoint;
450
+ }
451
+
452
+ // Go through obstacle range in reverse if toPoint is before
453
+ // fromPoint in the X-dimension.
454
+ i = searchDirection < 0 ?
455
+ // Searching backwards, start at last obstacle before last point
456
+ min(findLastObstacleBefore(chartObstacles, lastPoint.x),
457
+ chartObstacles.length - 1) :
458
+ // Forwards. Since we're not sorted by xMax, we have to look
459
+ // at all obstacles.
460
+ 0;
461
+
462
+ // Go through obstacles in this X range
463
+ while (chartObstacles[i] && (
464
+ searchDirection > 0 && chartObstacles[i].xMin <= lastPoint.x ||
465
+ searchDirection < 0 && chartObstacles[i].xMax >= firstPoint.x
466
+ )) {
467
+ // If this obstacle is between from and to points in a straight
468
+ // line, pivot at the intersection.
469
+ if (
470
+ chartObstacles[i].xMin <= lastPoint.x &&
471
+ chartObstacles[i].xMax >= firstPoint.x &&
472
+ chartObstacles[i].yMin <= highestPoint.y &&
473
+ chartObstacles[i].yMax >= lowestPoint.y
474
+ ) {
475
+ if (directionIsX) {
476
+ return {
477
+ y: fromPoint.y,
478
+ x: fromPoint.x < toPoint.x ?
479
+ chartObstacles[i].xMin - 1 :
480
+ chartObstacles[i].xMax + 1,
481
+ obstacle: chartObstacles[i]
482
+ };
483
+ }
484
+ // else ...
485
+ return {
486
+ x: fromPoint.x,
487
+ y: fromPoint.y < toPoint.y ?
488
+ chartObstacles[i].yMin - 1 :
489
+ chartObstacles[i].yMax + 1,
490
+ obstacle: chartObstacles[i]
491
+ };
492
+ }
493
+
494
+ i += searchDirection;
495
+ }
496
+
497
+ return toPoint;
498
+ }
499
+
500
+ /**
501
+ * Decide in which direction to dodge or get out of an obstacle.
502
+ * Considers desired direction, which way is shortest, soft and hard
503
+ * bounds.
504
+ *
505
+ * (? Returns a string, either xMin, xMax, yMin or yMax.)
506
+ *
507
+ * @private
508
+ * @function
509
+ *
510
+ * @param {object} obstacle
511
+ * Obstacle to dodge/escape.
512
+ *
513
+ * @param {object} fromPoint
514
+ * Point with x/y props that's dodging/escaping.
515
+ *
516
+ * @param {object} toPoint
517
+ * Goal point.
518
+ *
519
+ * @param {boolean} dirIsX
520
+ * Dodge in X dimension.
521
+ *
522
+ * @param {object} bounds
523
+ * Hard and soft boundaries.
524
+ *
525
+ * @return {boolean}
526
+ * Use max or not.
527
+ */
528
+ function getDodgeDirection(
529
+ obstacle,
530
+ fromPoint,
531
+ toPoint,
532
+ dirIsX,
533
+ bounds
534
+ ) {
535
+ var softBounds = bounds.soft,
536
+ hardBounds = bounds.hard,
537
+ dir = dirIsX ? 'x' : 'y',
538
+ toPointMax = { x: fromPoint.x, y: fromPoint.y },
539
+ toPointMin = { x: fromPoint.x, y: fromPoint.y },
540
+ minPivot,
541
+ maxPivot,
542
+ maxOutOfSoftBounds = obstacle[dir + 'Max'] >=
543
+ softBounds[dir + 'Max'],
544
+ minOutOfSoftBounds = obstacle[dir + 'Min'] <=
545
+ softBounds[dir + 'Min'],
546
+ maxOutOfHardBounds = obstacle[dir + 'Max'] >=
547
+ hardBounds[dir + 'Max'],
548
+ minOutOfHardBounds = obstacle[dir + 'Min'] <=
549
+ hardBounds[dir + 'Min'],
550
+ // Find out if we should prefer one direction over the other if
551
+ // we can choose freely
552
+ minDistance = abs(obstacle[dir + 'Min'] - fromPoint[dir]),
553
+ maxDistance = abs(obstacle[dir + 'Max'] - fromPoint[dir]),
554
+ // If it's a small difference, pick the one leading towards dest
555
+ // point. Otherwise pick the shortest distance
556
+ useMax = abs(minDistance - maxDistance) < 10 ?
557
+ fromPoint[dir] < toPoint[dir] :
558
+ maxDistance < minDistance;
559
+
560
+ // Check if we hit any obstacles trying to go around in either
561
+ // direction.
562
+ toPointMin[dir] = obstacle[dir + 'Min'];
563
+ toPointMax[dir] = obstacle[dir + 'Max'];
564
+ minPivot = pivotPoint(fromPoint, toPointMin, dirIsX)[dir] !==
565
+ toPointMin[dir];
566
+ maxPivot = pivotPoint(fromPoint, toPointMax, dirIsX)[dir] !==
567
+ toPointMax[dir];
568
+ useMax = minPivot ?
569
+ (maxPivot ? useMax : true) :
570
+ (maxPivot ? false : useMax);
571
+
572
+ // useMax now contains our preferred choice, bounds not taken into
573
+ // account. If both or neither direction is out of bounds we want to
574
+ // use this.
575
+
576
+ // Deal with soft bounds
577
+ useMax = minOutOfSoftBounds ?
578
+ (maxOutOfSoftBounds ? useMax : true) : // Out on min
579
+ (maxOutOfSoftBounds ? false : useMax); // Not out on min
580
+
581
+ // Deal with hard bounds
582
+ useMax = minOutOfHardBounds ?
583
+ (maxOutOfHardBounds ? useMax : true) : // Out on min
584
+ (maxOutOfHardBounds ? false : useMax); // Not out on min
585
+
586
+ return useMax;
587
+ }
588
+
589
+ // Find a clear path between point
590
+ function clearPathTo(fromPoint, toPoint, dirIsX) {
591
+ // Don't waste time if we've hit goal
592
+ if (fromPoint.x === toPoint.x && fromPoint.y === toPoint.y) {
593
+ return [];
594
+ }
595
+
596
+ var dir = dirIsX ? 'x' : 'y',
597
+ pivot,
598
+ segments,
599
+ waypoint,
600
+ waypointUseMax,
601
+ envelopingObstacle,
602
+ secondEnvelopingObstacle,
603
+ envelopWaypoint,
604
+ obstacleMargin = options.obstacleOptions.margin,
605
+ bounds = {
606
+ soft: {
607
+ xMin: softMinX,
608
+ xMax: softMaxX,
609
+ yMin: softMinY,
610
+ yMax: softMaxY
611
+ },
612
+ hard: options.hardBounds
613
+ };
614
+
615
+ // If fromPoint is inside an obstacle we have a problem. Break out
616
+ // by just going to the outside of this obstacle. We prefer to go to
617
+ // the nearest edge in the chosen direction.
618
+ envelopingObstacle =
619
+ findObstacleFromPoint(chartObstacles, fromPoint);
620
+ if (envelopingObstacle > -1) {
621
+ envelopingObstacle = chartObstacles[envelopingObstacle];
622
+ waypointUseMax = getDodgeDirection(
623
+ envelopingObstacle, fromPoint, toPoint, dirIsX, bounds
624
+ );
625
+
626
+ // Cut obstacle to hard bounds to make sure we stay within
627
+ limitObstacleToBounds(envelopingObstacle, options.hardBounds);
628
+
629
+ envelopWaypoint = dirIsX ? {
630
+ y: fromPoint.y,
631
+ x: envelopingObstacle[waypointUseMax ? 'xMax' : 'xMin'] +
632
+ (waypointUseMax ? 1 : -1)
633
+ } : {
634
+ x: fromPoint.x,
635
+ y: envelopingObstacle[waypointUseMax ? 'yMax' : 'yMin'] +
636
+ (waypointUseMax ? 1 : -1)
637
+ };
638
+
639
+ // If we crashed into another obstacle doing this, we put the
640
+ // waypoint between them instead
641
+ secondEnvelopingObstacle = findObstacleFromPoint(
642
+ chartObstacles, envelopWaypoint
643
+ );
644
+ if (secondEnvelopingObstacle > -1) {
645
+ secondEnvelopingObstacle = chartObstacles[
646
+ secondEnvelopingObstacle
647
+ ];
648
+
649
+ // Cut obstacle to hard bounds
650
+ limitObstacleToBounds(
651
+ secondEnvelopingObstacle,
652
+ options.hardBounds
653
+ );
654
+
655
+ // Modify waypoint to lay between obstacles
656
+ envelopWaypoint[dir] = waypointUseMax ? max(
657
+ envelopingObstacle[dir + 'Max'] - obstacleMargin + 1,
658
+ (
659
+ secondEnvelopingObstacle[dir + 'Min'] +
660
+ envelopingObstacle[dir + 'Max']
661
+ ) / 2
662
+ ) :
663
+ min((
664
+ envelopingObstacle[dir + 'Min'] + obstacleMargin - 1
665
+ ), (
666
+ (
667
+ secondEnvelopingObstacle[dir + 'Max'] +
668
+ envelopingObstacle[dir + 'Min']
669
+ ) / 2
670
+ ));
671
+
672
+ // We are not going anywhere. If this happens for the first
673
+ // time, do nothing. Otherwise, try to go to the extreme of
674
+ // the obstacle pair in the current direction.
675
+ if (fromPoint.x === envelopWaypoint.x &&
676
+ fromPoint.y === envelopWaypoint.y) {
677
+ if (forceObstacleBreak) {
678
+ envelopWaypoint[dir] = waypointUseMax ?
679
+ max(
680
+ envelopingObstacle[dir + 'Max'],
681
+ secondEnvelopingObstacle[dir + 'Max']
682
+ ) + 1 :
683
+ min(
684
+ envelopingObstacle[dir + 'Min'],
685
+ secondEnvelopingObstacle[dir + 'Min']
686
+ ) - 1;
687
+ }
688
+ // Toggle on if off, and the opposite
689
+ forceObstacleBreak = !forceObstacleBreak;
690
+ } else {
691
+ // This point is not identical to previous.
692
+ // Clear break trigger.
693
+ forceObstacleBreak = false;
694
+ }
695
+ }
696
+
697
+ segments = [{
698
+ start: fromPoint,
699
+ end: envelopWaypoint
700
+ }];
701
+
702
+ } else { // If not enveloping, use standard pivot calculation
703
+
704
+ pivot = pivotPoint(fromPoint, {
705
+ x: dirIsX ? toPoint.x : fromPoint.x,
706
+ y: dirIsX ? fromPoint.y : toPoint.y
707
+ }, dirIsX);
708
+
709
+ segments = [{
710
+ start: fromPoint,
711
+ end: {
712
+ x: pivot.x,
713
+ y: pivot.y
714
+ }
715
+ }];
716
+
717
+ // Pivot before goal, use a waypoint to dodge obstacle
718
+ if (pivot[dirIsX ? 'x' : 'y'] !== toPoint[dirIsX ? 'x' : 'y']) {
719
+ // Find direction of waypoint
720
+ waypointUseMax = getDodgeDirection(
721
+ pivot.obstacle, pivot, toPoint, !dirIsX, bounds
722
+ );
723
+
724
+ // Cut waypoint to hard bounds
725
+ limitObstacleToBounds(pivot.obstacle, options.hardBounds);
726
+
727
+ waypoint = {
728
+ x: dirIsX ?
729
+ pivot.x :
730
+ pivot.obstacle[waypointUseMax ? 'xMax' : 'xMin'] +
731
+ (waypointUseMax ? 1 : -1),
732
+ y: dirIsX ?
733
+ pivot.obstacle[waypointUseMax ? 'yMax' : 'yMin'] +
734
+ (waypointUseMax ? 1 : -1) :
735
+ pivot.y
736
+ };
737
+
738
+ // We're changing direction here, store that to make sure we
739
+ // also change direction when adding the last segment array
740
+ // after handling waypoint.
741
+ dirIsX = !dirIsX;
742
+
743
+ segments = segments.concat(clearPathTo({
744
+ x: pivot.x,
745
+ y: pivot.y
746
+ }, waypoint, dirIsX));
747
+ }
748
+ }
749
+
750
+ // Get segments for the other direction too
751
+ // Recursion is our friend
752
+ segments = segments.concat(clearPathTo(
753
+ segments[segments.length - 1].end, toPoint, !dirIsX
754
+ ));
755
+
756
+ return segments;
757
+ }
758
+
759
+ // Extract point to outside of obstacle in whichever direction is
760
+ // closest. Returns new point outside obstacle.
761
+ function extractFromObstacle(obstacle, point, goalPoint) {
762
+ var dirIsX = min(obstacle.xMax - point.x, point.x - obstacle.xMin) <
763
+ min(obstacle.yMax - point.y, point.y - obstacle.yMin),
764
+ bounds = {
765
+ soft: options.hardBounds,
766
+ hard: options.hardBounds
767
+ },
768
+ useMax = getDodgeDirection(
769
+ obstacle, point, goalPoint, dirIsX, bounds
770
+ );
771
+
772
+ return dirIsX ? {
773
+ y: point.y,
774
+ x: obstacle[useMax ? 'xMax' : 'xMin'] + (useMax ? 1 : -1)
775
+ } : {
776
+ x: point.x,
777
+ y: obstacle[useMax ? 'yMax' : 'yMin'] + (useMax ? 1 : -1)
778
+ };
779
+ }
780
+
781
+ // Cut the obstacle array to soft bounds for optimization in large
782
+ // datasets.
783
+ chartObstacles =
784
+ chartObstacles.slice(startObstacleIx, endObstacleIx + 1);
785
+
786
+ // If an obstacle envelops the end point, move it out of there and add
787
+ // a little segment to where it was.
788
+ if ((endObstacleIx = findObstacleFromPoint(chartObstacles, end)) > -1) {
789
+ extractedEndPoint = extractFromObstacle(
790
+ chartObstacles[endObstacleIx],
791
+ end,
792
+ start
793
+ );
794
+ endSegments.push({
795
+ end: end,
796
+ start: extractedEndPoint
797
+ });
798
+ end = extractedEndPoint;
799
+ }
800
+ // If it's still inside one or more obstacles, get out of there by
801
+ // force-moving towards the start point.
802
+ while (
803
+ (endObstacleIx = findObstacleFromPoint(chartObstacles, end)) > -1
804
+ ) {
805
+ useMax = end[dir] - start[dir] < 0;
806
+ extractedEndPoint = {
807
+ x: end.x,
808
+ y: end.y
809
+ };
810
+ extractedEndPoint[dir] = chartObstacles[endObstacleIx][
811
+ useMax ? dir + 'Max' : dir + 'Min'
812
+ ] + (useMax ? 1 : -1);
813
+ endSegments.push({
814
+ end: end,
815
+ start: extractedEndPoint
816
+ });
817
+ end = extractedEndPoint;
818
+ }
819
+
820
+ // Find the path
821
+ segments = clearPathTo(start, end, dirIsX);
822
+
823
+ // Add the end-point segments
824
+ segments = segments.concat(endSegments.reverse());
825
+
826
+ return {
827
+ path: pathFromSegments(segments),
828
+ obstacles: segments
829
+ };
830
+ }, {
831
+ requiresObstacles: true
832
+ })
833
+ };
834
+
835
+
836
+ return algorithms;
837
+ }(Highcharts));
838
+ (function (H) {
839
+ /* *
840
+ * (c) 2017 Highsoft AS
841
+ * Authors: Lars A. V. Cabrera
842
+ *
843
+ * License: www.highcharts.com/license
844
+ */
845
+
846
+
847
+
848
+ /**
849
+ * Creates an arrow symbol. Like a triangle, except not filled.
850
+ * ```
851
+ * o
852
+ * o
853
+ * o
854
+ * o
855
+ * o
856
+ * o
857
+ * o
858
+ * ```
859
+ *
860
+ * @private
861
+ * @function
862
+ *
863
+ * @param {number} x
864
+ * x position of the arrow
865
+ *
866
+ * @param {number} y
867
+ * y position of the arrow
868
+ *
869
+ * @param {number} w
870
+ * width of the arrow
871
+ *
872
+ * @param {number} h
873
+ * height of the arrow
874
+ *
875
+ * @return {Highcharts.SVGPathArray}
876
+ * Path array
877
+ */
878
+ H.SVGRenderer.prototype.symbols.arrow = function (x, y, w, h) {
879
+ return [
880
+ 'M', x, y + h / 2,
881
+ 'L', x + w, y,
882
+ 'L', x, y + h / 2,
883
+ 'L', x + w, y + h
884
+ ];
885
+ };
886
+
887
+ /**
888
+ * Creates a half-width arrow symbol. Like a triangle, except not filled.
889
+ * ```
890
+ * o
891
+ * o
892
+ * o
893
+ * o
894
+ * o
895
+ * ```
896
+ *
897
+ * @private
898
+ * @function
899
+ *
900
+ * @param {number} x
901
+ * x position of the arrow
902
+ *
903
+ * @param {number} y
904
+ * y position of the arrow
905
+ *
906
+ * @param {number} w
907
+ * width of the arrow
908
+ *
909
+ * @param {number} h
910
+ * height of the arrow
911
+ *
912
+ * @return {Highcharts.SVGPathArray}
913
+ * Path array
914
+ */
915
+ H.SVGRenderer.prototype.symbols['arrow-half'] = function (x, y, w, h) {
916
+ return H.SVGRenderer.prototype.symbols.arrow(x, y, w / 2, h);
917
+ };
918
+
919
+ /**
920
+ * Creates a left-oriented triangle.
921
+ * ```
922
+ * o
923
+ * ooooooo
924
+ * ooooooooooooo
925
+ * ooooooo
926
+ * o
927
+ * ```
928
+ *
929
+ * @private
930
+ * @function
931
+ *
932
+ * @param {number} x
933
+ * x position of the triangle
934
+ *
935
+ * @param {number} y
936
+ * y position of the triangle
937
+ *
938
+ * @param {number} w
939
+ * width of the triangle
940
+ *
941
+ * @param {number} h
942
+ * height of the triangle
943
+ *
944
+ * @return {Highcharts.SVGPathArray}
945
+ * Path array
946
+ */
947
+ H.SVGRenderer.prototype.symbols['triangle-left'] = function (x, y, w, h) {
948
+ return [
949
+ 'M', x + w, y,
950
+ 'L', x, y + h / 2,
951
+ 'L', x + w, y + h,
952
+ 'Z'
953
+ ];
954
+ };
955
+
956
+ /**
957
+ * Alias function for triangle-left.
958
+ *
959
+ * @private
960
+ * @function
961
+ *
962
+ * @param {number} x
963
+ * x position of the arrow
964
+ *
965
+ * @param {number} y
966
+ * y position of the arrow
967
+ *
968
+ * @param {number} w
969
+ * width of the arrow
970
+ *
971
+ * @param {number} h
972
+ * height of the arrow
973
+ *
974
+ * @return {Highcharts.SVGPathArray}
975
+ * Path array
976
+ */
977
+ H.SVGRenderer.prototype.symbols['arrow-filled'] =
978
+ H.SVGRenderer.prototype.symbols['triangle-left'];
979
+
980
+ /**
981
+ * Creates a half-width, left-oriented triangle.
982
+ * ```
983
+ * o
984
+ * oooo
985
+ * ooooooo
986
+ * oooo
987
+ * o
988
+ * ```
989
+ *
990
+ * @private
991
+ * @function
992
+ *
993
+ * @param {number} x
994
+ * x position of the triangle
995
+ *
996
+ * @param {number} y
997
+ * y position of the triangle
998
+ *
999
+ * @param {number} w
1000
+ * width of the triangle
1001
+ *
1002
+ * @param {number} h
1003
+ * height of the triangle
1004
+ *
1005
+ * @return {Highcharts.SVGPathArray}
1006
+ * Path array
1007
+ */
1008
+ H.SVGRenderer.prototype.symbols['triangle-left-half'] = function (x, y, w, h) {
1009
+ return H.SVGRenderer.prototype.symbols['triangle-left'](x, y, w / 2, h);
1010
+ };
1011
+
1012
+ /**
1013
+ * Alias function for triangle-left-half.
1014
+ *
1015
+ * @private
1016
+ * @function
1017
+ *
1018
+ * @param {number} x
1019
+ * x position of the arrow
1020
+ *
1021
+ * @param {number} y
1022
+ * y position of the arrow
1023
+ *
1024
+ * @param {number} w
1025
+ * width of the arrow
1026
+ *
1027
+ * @param {number} h
1028
+ * height of the arrow
1029
+ *
1030
+ * @return {Highcharts.SVGPathArray}
1031
+ * Path array
1032
+ */
1033
+ H.SVGRenderer.prototype.symbols['arrow-filled-half'] =
1034
+ H.SVGRenderer.prototype.symbols['triangle-left-half'];
1035
+
1036
+ }(Highcharts));
1037
+ (function (H, pathfinderAlgorithms) {
1038
+ /* *
1039
+ * (c) 2016 Highsoft AS
1040
+ * Authors: Øystein Moseng, Lars A. V. Cabrera
1041
+ *
1042
+ * License: www.highcharts.com/license
1043
+ */
1044
+
1045
+
1046
+
1047
+ var defined = H.defined,
1048
+ deg2rad = H.deg2rad,
1049
+ extend = H.extend,
1050
+ addEvent = H.addEvent,
1051
+ merge = H.merge,
1052
+ pick = H.pick,
1053
+ max = Math.max,
1054
+ min = Math.min;
1055
+
1056
+ /*
1057
+ @todo:
1058
+ - Document how to write your own algorithms
1059
+ - Consider adding a Point.pathTo method that wraps creating a connection
1060
+ and rendering it
1061
+ */
1062
+
1063
+
1064
+ // Set default Pathfinder options
1065
+ extend(H.defaultOptions, {
1066
+ /**
1067
+ * The Pathfinder module allows you to define connections between any two
1068
+ * points, represented as lines - optionally with markers for the start
1069
+ * and/or end points. Multiple algorithms are available for calculating how
1070
+ * the connecting lines are drawn.
1071
+ *
1072
+ * Connector functionality requires Highcharts Gantt to be loaded. In Gantt
1073
+ * charts, the connectors are used to draw dependencies between tasks.
1074
+ *
1075
+ * @see [dependency](series.gantt.data.dependency)
1076
+ *
1077
+ * @sample gantt/pathfinder/demo
1078
+ * Pathfinder connections
1079
+ *
1080
+ * @product gantt
1081
+ * @optionparent connectors
1082
+ */
1083
+ connectors: {
1084
+
1085
+ /**
1086
+ * Enable connectors for this chart. Requires Highcharts Gantt.
1087
+ *
1088
+ * @type {boolean}
1089
+ * @default true
1090
+ * @since 6.2.0
1091
+ * @apioption connectors.enabled
1092
+ */
1093
+
1094
+ /**
1095
+ * Set the default dash style for this chart's connecting lines.
1096
+ *
1097
+ * @type {string}
1098
+ * @default solid
1099
+ * @since 6.2.0
1100
+ * @apioption connectors.dashStyle
1101
+ */
1102
+
1103
+ /**
1104
+ * Set the default color for this chart's Pathfinder connecting lines.
1105
+ * Defaults to the color of the point being connected.
1106
+ *
1107
+ * @type {Highcharts.ColorString}
1108
+ * @since 6.2.0
1109
+ * @apioption connectors.lineColor
1110
+ */
1111
+
1112
+ /**
1113
+ * Set the default pathfinder margin to use, in pixels. Some Pathfinder
1114
+ * algorithms attempt to avoid obstacles, such as other points in the
1115
+ * chart. These algorithms use this margin to determine how close lines
1116
+ * can be to an obstacle. The default is to compute this automatically
1117
+ * from the size of the obstacles in the chart.
1118
+ *
1119
+ * To draw connecting lines close to existing points, set this to a low
1120
+ * number. For more space around existing points, set this number
1121
+ * higher.
1122
+ *
1123
+ * @sample gantt/pathfinder/algorithm-margin
1124
+ * Small algorithmMargin
1125
+ *
1126
+ * @type {number}
1127
+ * @since 6.2.0
1128
+ * @apioption connectors.algorithmMargin
1129
+ */
1130
+
1131
+ /**
1132
+ * Set the default pathfinder algorithm to use for this chart. It is
1133
+ * possible to define your own algorithms by adding them to the
1134
+ * Highcharts.Pathfinder.prototype.algorithms object before the chart
1135
+ * has been created.
1136
+ *
1137
+ * The default algorithms are as follows:
1138
+ *
1139
+ * `straight`: Draws a straight line between the connecting
1140
+ * points. Does not avoid other points when drawing.
1141
+ *
1142
+ * `simpleConnect`: Finds a path between the points using right angles
1143
+ * only. Takes only starting/ending points into
1144
+ * account, and will not avoid other points.
1145
+ *
1146
+ * `fastAvoid`: Finds a path between the points using right angles
1147
+ * only. Will attempt to avoid other points, but its
1148
+ * focus is performance over accuracy. Works well with
1149
+ * less dense datasets.
1150
+ *
1151
+ * Default value: `straight` is used as default for most series types,
1152
+ * while `simpleConnect` is used as default for Gantt series, to show
1153
+ * dependencies between points.
1154
+ *
1155
+ * @sample gantt/pathfinder/demo
1156
+ * Different types used
1157
+ *
1158
+ * @default undefined
1159
+ * @since 6.2.0
1160
+ * @validvalue ["straight", "simpleConnect", "fastAvoid"]
1161
+ */
1162
+ type: 'straight',
1163
+
1164
+ /**
1165
+ * Set the default pixel width for this chart's Pathfinder connecting
1166
+ * lines.
1167
+ *
1168
+ * @since 6.2.0
1169
+ */
1170
+ lineWidth: 1,
1171
+
1172
+ /**
1173
+ * Marker options for this chart's Pathfinder connectors. Note that
1174
+ * this option is overridden by the `startMarker` and `endMarker`
1175
+ * options.
1176
+ *
1177
+ * @since 6.2.0
1178
+ */
1179
+ marker: {
1180
+ /**
1181
+ * Set the radius of the connector markers. The default is
1182
+ * automatically computed based on the algorithmMargin setting.
1183
+ *
1184
+ * Setting marker.width and marker.height will override this
1185
+ * setting.
1186
+ *
1187
+ * @type {number}
1188
+ * @since 6.2.0
1189
+ * @apioption connectors.marker.radius
1190
+ */
1191
+
1192
+ /**
1193
+ * Set the width of the connector markers. If not supplied, this
1194
+ * is inferred from the marker radius.
1195
+ *
1196
+ * @type {number}
1197
+ * @since 6.2.0
1198
+ * @apioption connectors.marker.width
1199
+ */
1200
+
1201
+ /**
1202
+ * Set the height of the connector markers. If not supplied, this
1203
+ * is inferred from the marker radius.
1204
+ *
1205
+ * @type {number}
1206
+ * @since 6.2.0
1207
+ * @apioption connectors.marker.height
1208
+ */
1209
+
1210
+ /**
1211
+ * Set the color of the connector markers. By default this is the
1212
+ * same as the connector color.
1213
+ *
1214
+ * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
1215
+ * @since 6.2.0
1216
+ * @apioption connectors.marker.color
1217
+ */
1218
+
1219
+ /**
1220
+ * Set the line/border color of the connector markers. By default
1221
+ * this is the same as the marker color.
1222
+ *
1223
+ * @type {Highcharts.ColorString}
1224
+ * @since 6.2.0
1225
+ * @apioption connectors.marker.lineColor
1226
+ */
1227
+
1228
+ /**
1229
+ * Enable markers for the connectors.
1230
+ */
1231
+ enabled: false,
1232
+
1233
+ /**
1234
+ * Horizontal alignment of the markers relative to the points.
1235
+ *
1236
+ * @type {Highcharts.AlignType}
1237
+ */
1238
+ align: 'center',
1239
+
1240
+ /**
1241
+ * Vertical alignment of the markers relative to the points.
1242
+ *
1243
+ * @type {Highcharts.VerticalAlignType}
1244
+ */
1245
+ verticalAlign: 'middle',
1246
+
1247
+ /**
1248
+ * Whether or not to draw the markers inside the points.
1249
+ */
1250
+ inside: false,
1251
+
1252
+ /**
1253
+ * Set the line/border width of the pathfinder markers.
1254
+ */
1255
+ lineWidth: 1
1256
+ },
1257
+
1258
+ /**
1259
+ * Marker options specific to the start markers for this chart's
1260
+ * Pathfinder connectors. Overrides the generic marker options.
1261
+ *
1262
+ * @extends connectors.marker
1263
+ * @since 6.2.0
1264
+ */
1265
+ startMarker: {
1266
+ /**
1267
+ * Set the symbol of the connector start markers.
1268
+ */
1269
+ symbol: 'diamond'
1270
+ },
1271
+
1272
+ /**
1273
+ * Marker options specific to the end markers for this chart's
1274
+ * Pathfinder connectors. Overrides the generic marker options.
1275
+ *
1276
+ * @extends connectors.marker
1277
+ * @since 6.2.0
1278
+ */
1279
+ endMarker: {
1280
+ /**
1281
+ * Set the symbol of the connector end markers.
1282
+ */
1283
+ symbol: 'arrow-filled'
1284
+ }
1285
+ }
1286
+ });
1287
+
1288
+ /**
1289
+ * Override Pathfinder connector options for a series. Requires Highcharts Gantt
1290
+ * to be loaded.
1291
+ *
1292
+ * @extends connectors
1293
+ * @since 6.2.0
1294
+ * @excluding enabled, algorithmMargin
1295
+ * @product gantt
1296
+ * @apioption plotOptions.series.connectors
1297
+ */
1298
+
1299
+ /**
1300
+ * Connect to a point. Requires Highcharts Gantt to be loaded. This option can
1301
+ * be either a string, referring to the ID of another point, or an object, or an
1302
+ * array of either. If the option is an array, each element defines a
1303
+ * connection.
1304
+ *
1305
+ * @sample gantt/pathfinder/demo
1306
+ * Different connection types
1307
+ *
1308
+ * @type {string|Array<string|*>|*}
1309
+ * @extends plotOptions.series.connectors
1310
+ * @since 6.2.0
1311
+ * @excluding enabled
1312
+ * @product gantt
1313
+ * @apioption series.xrange.data.connect
1314
+ */
1315
+
1316
+ /**
1317
+ * The ID of the point to connect to.
1318
+ *
1319
+ * @type {string}
1320
+ * @since 6.2.0
1321
+ * @product gantt
1322
+ * @apioption series.xrange.data.connect.to
1323
+ */
1324
+
1325
+
1326
+ /**
1327
+ * Get point bounding box using plotX/plotY and shapeArgs. If using
1328
+ * graphic.getBBox() directly, the bbox will be affected by animation.
1329
+ *
1330
+ * @private
1331
+ * @function
1332
+ *
1333
+ * @param {Highcharts.Point} point
1334
+ * The point to get BB of.
1335
+ *
1336
+ * @return {object}
1337
+ * Result xMax, xMin, yMax, yMin.
1338
+ */
1339
+ function getPointBB(point) {
1340
+ var shapeArgs = point.shapeArgs,
1341
+ bb;
1342
+
1343
+ // Prefer using shapeArgs (columns)
1344
+ if (shapeArgs) {
1345
+ return {
1346
+ xMin: shapeArgs.x,
1347
+ xMax: shapeArgs.x + shapeArgs.width,
1348
+ yMin: shapeArgs.y,
1349
+ yMax: shapeArgs.y + shapeArgs.height
1350
+ };
1351
+ }
1352
+
1353
+ // Otherwise use plotX/plotY and bb
1354
+ bb = point.graphic && point.graphic.getBBox();
1355
+ return bb ? {
1356
+ xMin: point.plotX - bb.width / 2,
1357
+ xMax: point.plotX + bb.width / 2,
1358
+ yMin: point.plotY - bb.height / 2,
1359
+ yMax: point.plotY + bb.height / 2
1360
+ } : null;
1361
+ }
1362
+
1363
+
1364
+ /**
1365
+ * Calculate margin to place around obstacles for the pathfinder in pixels.
1366
+ * Returns a minimum of 1 pixel margin.
1367
+ *
1368
+ * @private
1369
+ * @function
1370
+ *
1371
+ * @param {Array<object>} obstacles
1372
+ * Obstacles to calculate margin from.
1373
+ *
1374
+ * @return {number}
1375
+ * The calculated margin in pixels. At least 1.
1376
+ */
1377
+ function calculateObstacleMargin(obstacles) {
1378
+ var len = obstacles.length,
1379
+ i = 0,
1380
+ j,
1381
+ obstacleDistance,
1382
+ distances = [],
1383
+ // Compute smallest distance between two rectangles
1384
+ distance = function (a, b, bbMargin) {
1385
+ // Count the distance even if we are slightly off
1386
+ var margin = pick(bbMargin, 10),
1387
+ yOverlap = a.yMax + margin > b.yMin - margin &&
1388
+ a.yMin - margin < b.yMax + margin,
1389
+ xOverlap = a.xMax + margin > b.xMin - margin &&
1390
+ a.xMin - margin < b.xMax + margin,
1391
+ xDistance = yOverlap ? (
1392
+ a.xMin > b.xMax ? a.xMin - b.xMax : b.xMin - a.xMax
1393
+ ) : Infinity,
1394
+ yDistance = xOverlap ? (
1395
+ a.yMin > b.yMax ? a.yMin - b.yMax : b.yMin - a.yMax
1396
+ ) : Infinity;
1397
+
1398
+ // If the rectangles collide, try recomputing with smaller margin.
1399
+ // If they collide anyway, discard the obstacle.
1400
+ if (xOverlap && yOverlap) {
1401
+ return (
1402
+ margin ?
1403
+ distance(a, b, Math.floor(margin / 2)) :
1404
+ Infinity
1405
+ );
1406
+ }
1407
+
1408
+ return min(xDistance, yDistance);
1409
+ };
1410
+
1411
+ // Go over all obstacles and compare them to the others.
1412
+ for (; i < len; ++i) {
1413
+ // Compare to all obstacles ahead. We will already have compared this
1414
+ // obstacle to the ones before.
1415
+ for (j = i + 1; j < len; ++j) {
1416
+ obstacleDistance = distance(obstacles[i], obstacles[j]);
1417
+ // TODO: Magic number 80
1418
+ if (obstacleDistance < 80) { // Ignore large distances
1419
+ distances.push(obstacleDistance);
1420
+ }
1421
+ }
1422
+ }
1423
+ // Ensure we always have at least one value, even in very spaceous charts
1424
+ distances.push(80);
1425
+
1426
+ return max(
1427
+ Math.floor(
1428
+ distances.sort(function (a, b) {
1429
+ return a - b;
1430
+ })[
1431
+ // Discard first 10% of the relevant distances, and then grab
1432
+ // the smallest one.
1433
+ Math.floor(distances.length / 10)
1434
+ ] / 2 - 1 // Divide the distance by 2 and subtract 1.
1435
+ ),
1436
+ 1 // 1 is the minimum margin
1437
+ );
1438
+ }
1439
+
1440
+
1441
+ /**
1442
+ * The Connection class. Used internally to represent a connection between two
1443
+ * points.
1444
+ *
1445
+ * @private
1446
+ * @class
1447
+ * @name Highcharts.Connection
1448
+ *
1449
+ * @param {Highcharts.Point} from
1450
+ * Connection runs from this Point.
1451
+ *
1452
+ * @param {Highcharts.Point} to
1453
+ * Connection runs to this Point.
1454
+ *
1455
+ * @param {Highcharts.ConnectorsOptions} [options]
1456
+ * Connection options.
1457
+ */
1458
+ function Connection(from, to, options) {
1459
+ this.init(from, to, options);
1460
+ }
1461
+ Connection.prototype = {
1462
+
1463
+ /**
1464
+ * Initialize the Connection object. Used as constructor only.
1465
+ *
1466
+ * @function Highcharts.Connection#init
1467
+ *
1468
+ * @param {Highcharts.Point} from
1469
+ * Connection runs from this Point.
1470
+ *
1471
+ * @param {Highcharts.Point} to
1472
+ * Connection runs to this Point.
1473
+ *
1474
+ * @param {Highcharts.ConnectorsOptions} [options]
1475
+ * Connection options.
1476
+ */
1477
+ init: function (from, to, options) {
1478
+ this.fromPoint = from;
1479
+ this.toPoint = to;
1480
+ this.options = options;
1481
+ this.chart = from.series.chart;
1482
+ this.pathfinder = this.chart.pathfinder;
1483
+ },
1484
+
1485
+ /**
1486
+ * Add (or update) this connection's path on chart. Stores reference to the
1487
+ * created element on this.graphics.path.
1488
+ *
1489
+ * @function Highcharts.Connection#renderPath
1490
+ *
1491
+ * @param {Highcharts.SVGPathArray} path
1492
+ * Path to render, in array format. E.g. ['M', 0, 0, 'L', 10, 10]
1493
+ *
1494
+ * @param {Highcharts.SVGAttributes} [attribs]
1495
+ * SVG attributes for the path.
1496
+ *
1497
+ * @param {Highcharts.AnimationOptionsObject} [animation]
1498
+ * Animation options for the rendering.
1499
+ *
1500
+ * @param {Function} [complete]
1501
+ * Callback function when the path has been rendered and animation is
1502
+ * complete.
1503
+ */
1504
+ renderPath: function (path, attribs, animation) {
1505
+ var connection = this,
1506
+ chart = this.chart,
1507
+ styledMode = chart.styledMode,
1508
+ pathfinder = chart.pathfinder,
1509
+ animate = !chart.options.chart.forExport && animation !== false,
1510
+ pathGraphic = connection.graphics && connection.graphics.path,
1511
+ anim;
1512
+
1513
+ // Add the SVG element of the pathfinder group if it doesn't exist
1514
+ if (!pathfinder.group) {
1515
+ pathfinder.group = chart.renderer.g()
1516
+ .addClass('highcharts-pathfinder-group')
1517
+ .attr({ zIndex: -1 })
1518
+ .add(chart.seriesGroup);
1519
+ }
1520
+
1521
+ // Shift the group to compensate for plot area.
1522
+ // Note: Do this always (even when redrawing a path) to avoid issues
1523
+ // when updating chart in a way that changes plot metrics.
1524
+ pathfinder.group.translate(chart.plotLeft, chart.plotTop);
1525
+
1526
+ // Create path if does not exist
1527
+ if (!(pathGraphic && pathGraphic.renderer)) {
1528
+ pathGraphic = chart.renderer.path()
1529
+ .add(pathfinder.group);
1530
+ if (!styledMode) {
1531
+ pathGraphic.attr({
1532
+ opacity: 0
1533
+ });
1534
+ }
1535
+ }
1536
+
1537
+ // Set path attribs and animate to the new path
1538
+ pathGraphic.attr(attribs);
1539
+ anim = { d: path };
1540
+ if (!styledMode) {
1541
+ anim.opacity = 1;
1542
+ }
1543
+ pathGraphic[animate ? 'animate' : 'attr'](anim, animation);
1544
+
1545
+ // Store reference on connection
1546
+ this.graphics = this.graphics || {};
1547
+ this.graphics.path = pathGraphic;
1548
+ },
1549
+
1550
+ /**
1551
+ * Calculate and add marker graphics for connection to the chart. The
1552
+ * created/updated elements are stored on this.graphics.start and
1553
+ * this.graphics.end.
1554
+ *
1555
+ * @function Highcharts.Connection#addMarker
1556
+ *
1557
+ * @param {string} type
1558
+ * Marker type, either 'start' or 'end'.
1559
+ *
1560
+ * @param {Highcharts.ConnectorsMarkerOptions} options
1561
+ * All options for this marker. Not calculated or merged with other
1562
+ * options.
1563
+ *
1564
+ * @param {Highcharts.SVGPathArray} path
1565
+ * Connection path in array format. This is used to calculate the
1566
+ * rotation angle of the markers.
1567
+ */
1568
+ addMarker: function (type, options, path) {
1569
+ var connection = this,
1570
+ chart = connection.fromPoint.series.chart,
1571
+ pathfinder = chart.pathfinder,
1572
+ renderer = chart.renderer,
1573
+ point = (
1574
+ type === 'start' ?
1575
+ connection.fromPoint :
1576
+ connection.toPoint
1577
+ ),
1578
+ anchor = point.getPathfinderAnchorPoint(options),
1579
+ markerVector,
1580
+ radians,
1581
+ rotation,
1582
+ box,
1583
+ width,
1584
+ height,
1585
+ pathVector;
1586
+
1587
+
1588
+ if (!options.enabled) {
1589
+ return;
1590
+ }
1591
+
1592
+ // Last vector before start/end of path, used to get angle
1593
+ if (type === 'start') {
1594
+ pathVector = {
1595
+ x: path[4],
1596
+ y: path[5]
1597
+ };
1598
+ } else { // 'end'
1599
+ pathVector = {
1600
+ x: path[path.length - 5],
1601
+ y: path[path.length - 4]
1602
+ };
1603
+ }
1604
+
1605
+ // Get angle between pathVector and anchor point and use it to create
1606
+ // marker position.
1607
+ radians = point.getRadiansToVector(pathVector, anchor);
1608
+ markerVector = point.getMarkerVector(
1609
+ radians,
1610
+ options.radius,
1611
+ anchor
1612
+ );
1613
+
1614
+ // Rotation of marker is calculated from angle between pathVector and
1615
+ // markerVector.
1616
+ // (Note:
1617
+ // Used to recalculate radians between markerVector and pathVector,
1618
+ // but this should be the same as between pathVector and anchor.)
1619
+ rotation = -radians / deg2rad;
1620
+
1621
+ if (options.width && options.height) {
1622
+ width = options.width;
1623
+ height = options.height;
1624
+ } else {
1625
+ width = height = options.radius * 2;
1626
+ }
1627
+
1628
+ // Add graphics object if it does not exist
1629
+ connection.graphics = connection.graphics || {};
1630
+ box = {
1631
+ x: markerVector.x - (width / 2),
1632
+ y: markerVector.y - (height / 2),
1633
+ width: width,
1634
+ height: height,
1635
+ rotation: rotation,
1636
+ rotationOriginX: markerVector.x,
1637
+ rotationOriginY: markerVector.y
1638
+ };
1639
+
1640
+ if (!connection.graphics[type]) {
1641
+
1642
+ // Create new marker element
1643
+ connection.graphics[type] = renderer.symbol(
1644
+ options.symbol
1645
+ )
1646
+ .addClass(
1647
+ 'highcharts-point-connecting-path-' + type + '-marker'
1648
+ )
1649
+ .attr(box)
1650
+ .add(pathfinder.group);
1651
+
1652
+ if (!renderer.styledMode) {
1653
+ connection.graphics[type].attr({
1654
+ fill: options.color || connection.fromPoint.color,
1655
+ stroke: options.lineColor,
1656
+ 'stroke-width': options.lineWidth,
1657
+ opacity: 0
1658
+ })
1659
+ .animate({
1660
+ opacity: 1
1661
+ }, point.series.options.animation);
1662
+ }
1663
+
1664
+ } else {
1665
+ connection.graphics[type].animate(box);
1666
+ }
1667
+ },
1668
+
1669
+ /**
1670
+ * Calculate and return connection path.
1671
+ * Note: Recalculates chart obstacles on demand if they aren't calculated.
1672
+ *
1673
+ * @function Highcharts.Connection#getPath
1674
+ *
1675
+ * @param {Highcharts.ConnectorsOptions} options
1676
+ * Connector options. Not calculated or merged with other options.
1677
+ *
1678
+ * @return {Highcharts.SVHPathArray}
1679
+ * Calculated SVG path data in array format.
1680
+ */
1681
+ getPath: function (options) {
1682
+ var pathfinder = this.pathfinder,
1683
+ chart = this.chart,
1684
+ algorithm = pathfinder.algorithms[options.type],
1685
+ chartObstacles = pathfinder.chartObstacles;
1686
+
1687
+ if (typeof algorithm !== 'function') {
1688
+ H.error(
1689
+ '"' + options.type + '" is not a Pathfinder algorithm.'
1690
+ );
1691
+ return;
1692
+ }
1693
+
1694
+ // This function calculates obstacles on demand if they don't exist
1695
+ if (algorithm.requiresObstacles && !chartObstacles) {
1696
+ chartObstacles =
1697
+ pathfinder.chartObstacles =
1698
+ pathfinder.getChartObstacles(options);
1699
+
1700
+ // If the algorithmMargin was computed, store the result in default
1701
+ // options.
1702
+ chart.options.connectors.algorithmMargin = options.algorithmMargin;
1703
+
1704
+ // Cache some metrics too
1705
+ pathfinder.chartObstacleMetrics =
1706
+ pathfinder.getObstacleMetrics(chartObstacles);
1707
+ }
1708
+
1709
+ // Get the SVG path
1710
+ return algorithm(
1711
+ // From
1712
+ this.fromPoint.getPathfinderAnchorPoint(options.startMarker),
1713
+ // To
1714
+ this.toPoint.getPathfinderAnchorPoint(options.endMarker),
1715
+ merge({
1716
+ chartObstacles: chartObstacles,
1717
+ lineObstacles: pathfinder.lineObstacles || [],
1718
+ obstacleMetrics: pathfinder.chartObstacleMetrics,
1719
+ hardBounds: {
1720
+ xMin: 0,
1721
+ xMax: chart.plotWidth,
1722
+ yMin: 0,
1723
+ yMax: chart.plotHeight
1724
+ },
1725
+ obstacleOptions: {
1726
+ margin: options.algorithmMargin
1727
+ },
1728
+ startDirectionX: pathfinder.getAlgorithmStartDirection(
1729
+ options.startMarker
1730
+ )
1731
+ }, options)
1732
+ );
1733
+ },
1734
+
1735
+ /**
1736
+ * (re)Calculate and (re)draw the connection.
1737
+ *
1738
+ * @function Highcharts.Connection#render
1739
+ */
1740
+ render: function () {
1741
+ var connection = this,
1742
+ fromPoint = connection.fromPoint,
1743
+ series = fromPoint.series,
1744
+ chart = series.chart,
1745
+ pathfinder = chart.pathfinder,
1746
+ pathResult,
1747
+ path,
1748
+ options = merge(
1749
+ chart.options.connectors, series.options.connectors,
1750
+ fromPoint.options.connectors, connection.options
1751
+ ),
1752
+ attribs = {};
1753
+
1754
+ // Set path attribs
1755
+ if (!chart.styledMode) {
1756
+ attribs.stroke = options.lineColor || fromPoint.color;
1757
+ attribs['stroke-width'] = options.lineWidth;
1758
+ if (options.dashStyle) {
1759
+ attribs.dashstyle = options.dashStyle;
1760
+ }
1761
+ }
1762
+
1763
+ attribs.class = 'highcharts-point-connecting-path ' +
1764
+ 'highcharts-color-' + fromPoint.colorIndex;
1765
+ options = merge(attribs, options);
1766
+
1767
+ // Set common marker options
1768
+ if (!defined(options.marker.radius)) {
1769
+ options.marker.radius = min(max(
1770
+ Math.ceil((options.algorithmMargin || 8) / 2) - 1, 1
1771
+ ), 5);
1772
+ }
1773
+ // Get the path
1774
+ pathResult = connection.getPath(options);
1775
+ path = pathResult.path;
1776
+
1777
+ // Always update obstacle storage with obstacles from this path.
1778
+ // We don't know if future calls will need this for their algorithm.
1779
+ if (pathResult.obstacles) {
1780
+ pathfinder.lineObstacles = pathfinder.lineObstacles || [];
1781
+ pathfinder.lineObstacles =
1782
+ pathfinder.lineObstacles.concat(pathResult.obstacles);
1783
+ }
1784
+
1785
+ // Add the calculated path to the pathfinder group
1786
+ connection.renderPath(path, attribs, series.options.animation);
1787
+
1788
+ // Render the markers
1789
+ connection.addMarker(
1790
+ 'start',
1791
+ merge(options.marker, options.startMarker),
1792
+ path
1793
+ );
1794
+ connection.addMarker(
1795
+ 'end',
1796
+ merge(options.marker, options.endMarker),
1797
+ path
1798
+ );
1799
+ },
1800
+
1801
+ /**
1802
+ * Destroy connection by destroying the added graphics elements.
1803
+ *
1804
+ * @function Highcharts.Connection#destroy
1805
+ */
1806
+ destroy: function () {
1807
+ if (this.graphics) {
1808
+ H.objectEach(this.graphics, function (val) {
1809
+ val.destroy();
1810
+ });
1811
+ delete this.graphics;
1812
+ }
1813
+ }
1814
+ };
1815
+
1816
+
1817
+ /**
1818
+ * The Pathfinder class.
1819
+ *
1820
+ * @private
1821
+ * @class
1822
+ * @name Highcharts.Pathfinder
1823
+ *
1824
+ * @param {Highcharts.Chart} chart
1825
+ * The chart to operate on.
1826
+ */
1827
+ function Pathfinder(chart) {
1828
+ this.init(chart);
1829
+ }
1830
+ Pathfinder.prototype = {
1831
+
1832
+ /**
1833
+ * @name Highcharts.Pathfinder#algorithms
1834
+ * @type {Highcharts.Dictionary<Function>}
1835
+ */
1836
+ algorithms: pathfinderAlgorithms,
1837
+
1838
+ /**
1839
+ * Initialize the Pathfinder object.
1840
+ *
1841
+ * @function Highcharts.Pathfinder#init
1842
+ *
1843
+ * @param {Highcharts.Chart} chart
1844
+ * The chart context.
1845
+ */
1846
+ init: function (chart) {
1847
+ // Initialize pathfinder with chart context
1848
+ this.chart = chart;
1849
+
1850
+ // Init connection reference list
1851
+ this.connections = [];
1852
+
1853
+ // Recalculate paths/obstacles on chart redraw
1854
+ addEvent(chart, 'redraw', function () {
1855
+ this.pathfinder.update();
1856
+ });
1857
+ },
1858
+
1859
+ /**
1860
+ * Update Pathfinder connections from scratch.
1861
+ *
1862
+ * @function Highcharts.Pathfinder#update
1863
+ *
1864
+ * @param {boolean} deferRender
1865
+ * Whether or not to defer rendering of connections until
1866
+ * series.afterAnimate event has fired. Used on first render.
1867
+ */
1868
+ update: function (deferRender) {
1869
+ var chart = this.chart,
1870
+ pathfinder = this,
1871
+ oldConnections = pathfinder.connections;
1872
+
1873
+ // Rebuild pathfinder connections from options
1874
+ pathfinder.connections = [];
1875
+ chart.series.forEach(function (series) {
1876
+ if (series.visible) {
1877
+ series.points.forEach(function (point) {
1878
+ var to,
1879
+ connects = (
1880
+ point.options &&
1881
+ point.options.connect &&
1882
+ H.splat(point.options.connect)
1883
+ );
1884
+
1885
+ if (point.visible && point.isInside !== false && connects) {
1886
+ connects.forEach(function (connect) {
1887
+ to = chart.get(
1888
+ typeof connect === 'string' ?
1889
+ connect : connect.to
1890
+ );
1891
+ if (
1892
+ to instanceof H.Point &&
1893
+ to.series.visible &&
1894
+ to.visible &&
1895
+ to.isInside !== false
1896
+ ) {
1897
+ // Add new connection
1898
+ pathfinder.connections.push(new Connection(
1899
+ point, // from
1900
+ to,
1901
+ typeof connect === 'string' ? {} : connect
1902
+ ));
1903
+ }
1904
+ });
1905
+ }
1906
+ });
1907
+ }
1908
+ });
1909
+
1910
+ // Clear connections that should not be updated, and move old info over
1911
+ // to new connections.
1912
+ for (
1913
+ var j = 0, k, found, lenOld = oldConnections.length,
1914
+ lenNew = pathfinder.connections.length;
1915
+ j < lenOld;
1916
+ ++j
1917
+ ) {
1918
+ found = false;
1919
+ for (k = 0; k < lenNew; ++k) {
1920
+ if (
1921
+ oldConnections[j].fromPoint ===
1922
+ pathfinder.connections[k].fromPoint &&
1923
+ oldConnections[j].toPoint ===
1924
+ pathfinder.connections[k].toPoint
1925
+ ) {
1926
+ pathfinder.connections[k].graphics =
1927
+ oldConnections[j].graphics;
1928
+ found = true;
1929
+ break;
1930
+ }
1931
+ }
1932
+ if (!found) {
1933
+ oldConnections[j].destroy();
1934
+ }
1935
+ }
1936
+
1937
+ // Clear obstacles to force recalculation. This must be done on every
1938
+ // redraw in case positions have changed. Recalculation is handled in
1939
+ // Connection.getPath on demand.
1940
+ delete this.chartObstacles;
1941
+ delete this.lineObstacles;
1942
+
1943
+ // Draw the pending connections
1944
+ pathfinder.renderConnections(deferRender);
1945
+ },
1946
+
1947
+ /**
1948
+ * Draw the chart's connecting paths.
1949
+ *
1950
+ * @function Highcharts.Pathfinder#renderConnections
1951
+ *
1952
+ * @param {boolean} deferRender
1953
+ * Whether or not to defer render until series animation is finished.
1954
+ * Used on first render.
1955
+ */
1956
+ renderConnections: function (deferRender) {
1957
+ if (deferRender) {
1958
+ // Render after series are done animating
1959
+ this.chart.series.forEach(function (series) {
1960
+ var render = function () {
1961
+ // Find pathfinder connections belonging to this series
1962
+ // that haven't rendered, and render them now.
1963
+ var pathfinder = series.chart.pathfinder,
1964
+ conns = pathfinder && pathfinder.connections || [];
1965
+
1966
+ conns.forEach(function (connection) {
1967
+ if (
1968
+ connection.fromPoint &&
1969
+ connection.fromPoint.series === series
1970
+ ) {
1971
+ connection.render();
1972
+ }
1973
+ });
1974
+ if (series.pathfinderRemoveRenderEvent) {
1975
+ series.pathfinderRemoveRenderEvent();
1976
+ delete series.pathfinderRemoveRenderEvent;
1977
+ }
1978
+ };
1979
+
1980
+ if (series.options.animation === false) {
1981
+ render();
1982
+ } else {
1983
+ series.pathfinderRemoveRenderEvent = addEvent(
1984
+ series, 'afterAnimate', render
1985
+ );
1986
+ }
1987
+ });
1988
+ } else {
1989
+ // Go through connections and render them
1990
+ this.connections.forEach(function (connection) {
1991
+ connection.render();
1992
+ });
1993
+ }
1994
+ },
1995
+
1996
+ /**
1997
+ * Get obstacles for the points in the chart. Does not include connecting
1998
+ * lines from Pathfinder. Applies algorithmMargin to the obstacles.
1999
+ *
2000
+ * @function Highcharts.Pathfinder#getChartObstacles
2001
+ *
2002
+ * @param {object} options
2003
+ * Options for the calculation. Currenlty only
2004
+ * options.algorithmMargin.
2005
+ *
2006
+ * @return {Array<object>}
2007
+ * An array of calculated obstacles. Each obstacle is defined as an
2008
+ * object with xMin, xMax, yMin and yMax properties.
2009
+ */
2010
+ getChartObstacles: function (options) {
2011
+ var obstacles = [],
2012
+ series = this.chart.series,
2013
+ margin = pick(options.algorithmMargin, 0),
2014
+ calculatedMargin;
2015
+
2016
+ for (var i = 0, sLen = series.length; i < sLen; ++i) {
2017
+ if (series[i].visible) {
2018
+ for (
2019
+ var j = 0, pLen = series[i].points.length, bb, point;
2020
+ j < pLen;
2021
+ ++j
2022
+ ) {
2023
+ point = series[i].points[j];
2024
+ if (point.visible) {
2025
+ bb = getPointBB(point);
2026
+ if (bb) {
2027
+ obstacles.push({
2028
+ xMin: bb.xMin - margin,
2029
+ xMax: bb.xMax + margin,
2030
+ yMin: bb.yMin - margin,
2031
+ yMax: bb.yMax + margin
2032
+ });
2033
+ }
2034
+ }
2035
+ }
2036
+ }
2037
+ }
2038
+
2039
+ // Sort obstacles by xMin for optimization
2040
+ obstacles = obstacles.sort(function (a, b) {
2041
+ return a.xMin - b.xMin;
2042
+ });
2043
+
2044
+ // Add auto-calculated margin if the option is not defined
2045
+ if (!defined(options.algorithmMargin)) {
2046
+ calculatedMargin =
2047
+ options.algorithmMargin =
2048
+ calculateObstacleMargin(obstacles);
2049
+ obstacles.forEach(function (obstacle) {
2050
+ obstacle.xMin -= calculatedMargin;
2051
+ obstacle.xMax += calculatedMargin;
2052
+ obstacle.yMin -= calculatedMargin;
2053
+ obstacle.yMax += calculatedMargin;
2054
+ });
2055
+ }
2056
+
2057
+ return obstacles;
2058
+ },
2059
+
2060
+ /**
2061
+ * Utility function to get metrics for obstacles:
2062
+ * - Widest obstacle width
2063
+ * - Tallest obstacle height
2064
+ *
2065
+ * @function Highcharts.Pathfinder#getObstacleMetrics
2066
+ *
2067
+ * @param {Array<object>} obstacles
2068
+ * An array of obstacles to inspect.
2069
+ *
2070
+ * @return {object}
2071
+ * The calculated metrics, as an object with maxHeight and maxWidth
2072
+ * properties.
2073
+ */
2074
+ getObstacleMetrics: function (obstacles) {
2075
+ var maxWidth = 0,
2076
+ maxHeight = 0,
2077
+ width,
2078
+ height,
2079
+ i = obstacles.length;
2080
+
2081
+ while (i--) {
2082
+ width = obstacles[i].xMax - obstacles[i].xMin;
2083
+ height = obstacles[i].yMax - obstacles[i].yMin;
2084
+ if (maxWidth < width) {
2085
+ maxWidth = width;
2086
+ }
2087
+ if (maxHeight < height) {
2088
+ maxHeight = height;
2089
+ }
2090
+ }
2091
+
2092
+ return {
2093
+ maxHeight: maxHeight,
2094
+ maxWidth: maxWidth
2095
+ };
2096
+ },
2097
+
2098
+ /**
2099
+ * Utility to get which direction to start the pathfinding algorithm
2100
+ * (X vs Y), calculated from a set of marker options.
2101
+ *
2102
+ * @function Highcharts.Pathfinder#getAlgorithmStartDirection
2103
+ *
2104
+ * @param {Highcharts.ConnectorsMarkerOptions} markerOptions
2105
+ * Marker options to calculate from.
2106
+ *
2107
+ * @return {boolean}
2108
+ * Returns true for X, false for Y, and undefined for autocalculate.
2109
+ */
2110
+ getAlgorithmStartDirection: function (markerOptions) {
2111
+ var xCenter = markerOptions.align !== 'left' &&
2112
+ markerOptions.align !== 'right',
2113
+ yCenter = markerOptions.verticalAlign !== 'top' &&
2114
+ markerOptions.verticalAlign !== 'bottom',
2115
+ undef;
2116
+
2117
+ return xCenter ?
2118
+ (yCenter ? undef : false) : // x is centered
2119
+ (yCenter ? true : undef); // x is off-center
2120
+ }
2121
+ };
2122
+
2123
+ // Add to Highcharts namespace
2124
+ H.Connection = Connection;
2125
+ H.Pathfinder = Pathfinder;
2126
+
2127
+
2128
+ // Add pathfinding capabilities to Points
2129
+ extend(H.Point.prototype, /** @lends Point.prototype */ {
2130
+
2131
+ /**
2132
+ * Get coordinates of anchor point for pathfinder connection.
2133
+ *
2134
+ * @private
2135
+ * @function Highcharts.Point#getPathfinderAnchorPoint
2136
+ *
2137
+ * @param {Highcharts.ConnectorsMarkerOptions} markerOptions
2138
+ * Connection options for position on point.
2139
+ *
2140
+ * @return {object}
2141
+ * An object with x/y properties for the position. Coordinates are
2142
+ * in plot values, not relative to point.
2143
+ */
2144
+ getPathfinderAnchorPoint: function (markerOptions) {
2145
+ var bb = getPointBB(this),
2146
+ x,
2147
+ y;
2148
+
2149
+ switch (markerOptions.align) { // eslint-disable-line default-case
2150
+ case 'right':
2151
+ x = 'xMax';
2152
+ break;
2153
+ case 'left':
2154
+ x = 'xMin';
2155
+ }
2156
+
2157
+ switch (markerOptions.verticalAlign) { // eslint-disable-line default-case
2158
+ case 'top':
2159
+ y = 'yMin';
2160
+ break;
2161
+ case 'bottom':
2162
+ y = 'yMax';
2163
+ }
2164
+
2165
+ return {
2166
+ x: x ? bb[x] : (bb.xMin + bb.xMax) / 2,
2167
+ y: y ? bb[y] : (bb.yMin + bb.yMax) / 2
2168
+ };
2169
+ },
2170
+
2171
+ /**
2172
+ * Utility to get the angle from one point to another.
2173
+ *
2174
+ * @private
2175
+ * @function Highcharts.Point#getRadiansToVector
2176
+ *
2177
+ * @param {object} v1
2178
+ * The first vector, as an object with x/y properties.
2179
+ *
2180
+ * @param {object} v2
2181
+ * The second vector, as an object with x/y properties.
2182
+ *
2183
+ * @return {number}
2184
+ * The angle in degrees
2185
+ */
2186
+ getRadiansToVector: function (v1, v2) {
2187
+ var box;
2188
+
2189
+ if (!defined(v2)) {
2190
+ box = getPointBB(this);
2191
+ v2 = {
2192
+ x: (box.xMin + box.xMax) / 2,
2193
+ y: (box.yMin + box.yMax) / 2
2194
+ };
2195
+ }
2196
+ return Math.atan2(v2.y - v1.y, v1.x - v2.x);
2197
+ },
2198
+
2199
+ /**
2200
+ * Utility to get the position of the marker, based on the path angle and
2201
+ * the marker's radius.
2202
+ *
2203
+ * @private
2204
+ * @function Highcharts.Point#getMarkerVector
2205
+ *
2206
+ * @param {number} radians
2207
+ * The angle in radians from the point center to another vector.
2208
+ *
2209
+ * @param {number} markerRadius
2210
+ * The radius of the marker, to calculate the additional distance to
2211
+ * the center of the marker.
2212
+ *
2213
+ * @param {object} anchor
2214
+ * The anchor point of the path and marker as an object with x/y
2215
+ * properties.
2216
+ *
2217
+ * @return {object}
2218
+ * The marker vector as an object with x/y properties.
2219
+ */
2220
+ getMarkerVector: function (radians, markerRadius, anchor) {
2221
+ var twoPI = Math.PI * 2.0,
2222
+ theta = radians,
2223
+ bb = getPointBB(this),
2224
+ rectWidth = bb.xMax - bb.xMin,
2225
+ rectHeight = bb.yMax - bb.yMin,
2226
+ rAtan = Math.atan2(rectHeight, rectWidth),
2227
+ tanTheta = 1,
2228
+ leftOrRightRegion = false,
2229
+ rectHalfWidth = rectWidth / 2.0,
2230
+ rectHalfHeight = rectHeight / 2.0,
2231
+ rectHorizontalCenter = bb.xMin + rectHalfWidth,
2232
+ rectVerticalCenter = bb.yMin + rectHalfHeight,
2233
+ edgePoint = {
2234
+ x: rectHorizontalCenter,
2235
+ y: rectVerticalCenter
2236
+ },
2237
+ markerPoint = {},
2238
+ xFactor = 1,
2239
+ yFactor = 1;
2240
+
2241
+ while (theta < -Math.PI) {
2242
+ theta += twoPI;
2243
+ }
2244
+
2245
+ while (theta > Math.PI) {
2246
+ theta -= twoPI;
2247
+ }
2248
+
2249
+ tanTheta = Math.tan(theta);
2250
+
2251
+ if ((theta > -rAtan) && (theta <= rAtan)) {
2252
+ // Right side
2253
+ yFactor = -1;
2254
+ leftOrRightRegion = true;
2255
+ } else if (theta > rAtan && theta <= (Math.PI - rAtan)) {
2256
+ // Top side
2257
+ yFactor = -1;
2258
+ } else if (theta > (Math.PI - rAtan) || theta <= -(Math.PI - rAtan)) {
2259
+ // Left side
2260
+ xFactor = -1;
2261
+ leftOrRightRegion = true;
2262
+ } else {
2263
+ // Bottom side
2264
+ xFactor = -1;
2265
+ }
2266
+
2267
+ // Correct the edgePoint according to the placement of the marker
2268
+ if (leftOrRightRegion) {
2269
+ edgePoint.x += xFactor * (rectHalfWidth);
2270
+ edgePoint.y += yFactor * (rectHalfWidth) * tanTheta;
2271
+ } else {
2272
+ edgePoint.x += xFactor * (rectHeight / (2.0 * tanTheta));
2273
+ edgePoint.y += yFactor * (rectHalfHeight);
2274
+ }
2275
+
2276
+ if (anchor.x !== rectHorizontalCenter) {
2277
+ edgePoint.x = anchor.x;
2278
+ }
2279
+ if (anchor.y !== rectVerticalCenter) {
2280
+ edgePoint.y = anchor.y;
2281
+ }
2282
+
2283
+ markerPoint.x = edgePoint.x + (markerRadius * Math.cos(theta));
2284
+ markerPoint.y = edgePoint.y - (markerRadius * Math.sin(theta));
2285
+
2286
+ return markerPoint;
2287
+ }
2288
+ });
2289
+
2290
+
2291
+ // Warn if using legacy options. Copy the options over. Note that this will
2292
+ // still break if using the legacy options in chart.update, addSeries etc.
2293
+ function warnLegacy(chart) {
2294
+ if (
2295
+ chart.options.pathfinder ||
2296
+ chart.series.reduce(function (acc, series) {
2297
+ if (series.options) {
2298
+ merge(
2299
+ true,
2300
+ (
2301
+ series.options.connectors = series.options.connectors ||
2302
+ {}
2303
+ ), series.options.pathfinder
2304
+ );
2305
+ }
2306
+ return acc || series.options && series.options.pathfinder;
2307
+ }, false)
2308
+ ) {
2309
+ merge(
2310
+ true,
2311
+ (chart.options.connectors = chart.options.connectors || {}),
2312
+ chart.options.pathfinder
2313
+ );
2314
+ H.error('WARNING: Pathfinder options have been renamed. ' +
2315
+ 'Use "chart.connectors" or "series.connectors" instead.');
2316
+ }
2317
+ }
2318
+
2319
+
2320
+ // Initialize Pathfinder for charts
2321
+ H.Chart.prototype.callbacks.push(function (chart) {
2322
+ var options = chart.options;
2323
+
2324
+ if (options.connectors.enabled !== false) {
2325
+ warnLegacy(chart);
2326
+ this.pathfinder = new Pathfinder(this);
2327
+ this.pathfinder.update(true); // First draw, defer render
2328
+ }
2329
+ });
2330
+
2331
+ }(Highcharts, algorithms));
2332
+ return (function () {
2333
+
2334
+
2335
+ }());
2336
+ }));