@carbon/charts 0.41.20 → 0.41.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (417) hide show
  1. package/CHANGELOG.md +28 -46
  2. package/axis-chart.d.ts +4 -4
  3. package/axis-chart.js +46 -46
  4. package/axis-chart.js.map +1 -1
  5. package/build/demo/create-codesandbox.d.ts +42 -42
  6. package/build/demo/data/bar.d.ts +2 -2
  7. package/build/demo/data/index.d.ts +13 -13
  8. package/build/demo/data/line.d.ts +4 -4
  9. package/build/demo/data/meter.d.ts +1 -1
  10. package/build/src/axis-chart.d.ts +4 -4
  11. package/build/src/chart.d.ts +3 -3
  12. package/build/src/charts/area-stacked.d.ts +2 -2
  13. package/build/src/charts/area.d.ts +2 -2
  14. package/build/src/charts/bar-grouped.d.ts +2 -2
  15. package/build/src/charts/bar-simple.d.ts +2 -2
  16. package/build/src/charts/bar-stacked.d.ts +2 -2
  17. package/build/src/charts/bubble.d.ts +2 -2
  18. package/build/src/charts/combo.d.ts +2 -2
  19. package/build/src/charts/donut.d.ts +2 -2
  20. package/build/src/charts/gauge.d.ts +3 -3
  21. package/build/src/charts/index.d.ts +16 -16
  22. package/build/src/charts/line.d.ts +2 -2
  23. package/build/src/charts/lollipop.d.ts +2 -2
  24. package/build/src/charts/meter.d.ts +3 -3
  25. package/build/src/charts/pie.d.ts +3 -3
  26. package/build/src/charts/radar.d.ts +2 -2
  27. package/build/src/charts/scatter.d.ts +2 -2
  28. package/build/src/charts/treemap.d.ts +2 -2
  29. package/build/src/components/axes/axis.d.ts +3 -3
  30. package/build/src/components/axes/chart-clip.d.ts +2 -2
  31. package/build/src/components/axes/grid-brush.d.ts +1 -1
  32. package/build/src/components/axes/grid.d.ts +1 -1
  33. package/build/src/components/axes/ruler-stacked.d.ts +1 -1
  34. package/build/src/components/axes/ruler.d.ts +2 -2
  35. package/build/src/components/axes/toolbar.d.ts +2 -2
  36. package/build/src/components/axes/two-dimensional-axes.d.ts +2 -2
  37. package/build/src/components/axes/zero-line.d.ts +1 -1
  38. package/build/src/components/axes/zoom-bar.d.ts +2 -2
  39. package/build/src/components/component.d.ts +1 -1
  40. package/build/src/components/essentials/legend.d.ts +1 -1
  41. package/build/src/components/essentials/threshold.d.ts +3 -3
  42. package/build/src/components/essentials/title-meter.d.ts +1 -1
  43. package/build/src/components/essentials/title.d.ts +1 -1
  44. package/build/src/components/essentials/tooltip-axis.d.ts +1 -1
  45. package/build/src/components/essentials/tooltip.d.ts +3 -3
  46. package/build/src/components/graphs/area-stacked.d.ts +1 -1
  47. package/build/src/components/graphs/area.d.ts +1 -1
  48. package/build/src/components/graphs/bar-grouped.d.ts +2 -2
  49. package/build/src/components/graphs/bar-simple.d.ts +1 -1
  50. package/build/src/components/graphs/bar-stacked.d.ts +1 -1
  51. package/build/src/components/graphs/bar.d.ts +1 -1
  52. package/build/src/components/graphs/bubble.d.ts +2 -2
  53. package/build/src/components/graphs/donut.d.ts +1 -1
  54. package/build/src/components/graphs/gauge.d.ts +1 -1
  55. package/build/src/components/graphs/line.d.ts +1 -1
  56. package/build/src/components/graphs/lollipop.d.ts +1 -1
  57. package/build/src/components/graphs/meter.d.ts +1 -1
  58. package/build/src/components/graphs/pie.d.ts +1 -1
  59. package/build/src/components/graphs/radar.d.ts +1 -1
  60. package/build/src/components/graphs/scatter-stacked.d.ts +1 -1
  61. package/build/src/components/graphs/scatter.d.ts +2 -2
  62. package/build/src/components/graphs/skeleton-lines.d.ts +1 -1
  63. package/build/src/components/graphs/skeleton.d.ts +1 -1
  64. package/build/src/components/graphs/treemap.d.ts +1 -1
  65. package/build/src/components/index.d.ts +36 -36
  66. package/build/src/components/layout/layout.d.ts +3 -3
  67. package/build/src/components/layout/spacer.d.ts +1 -1
  68. package/build/src/configuration-non-customizable.d.ts +7 -7
  69. package/build/src/configuration.d.ts +2 -2
  70. package/build/src/interfaces/axis-scales.d.ts +7 -7
  71. package/build/src/interfaces/charts.d.ts +11 -4
  72. package/build/src/interfaces/components.d.ts +3 -3
  73. package/build/src/interfaces/enums.d.ts +1 -1
  74. package/build/src/interfaces/index.d.ts +7 -7
  75. package/build/src/interfaces/layout.d.ts +1 -1
  76. package/build/src/interfaces/model.d.ts +1 -1
  77. package/build/src/model-cartesian-charts.d.ts +1 -1
  78. package/build/src/model-gauge.d.ts +1 -1
  79. package/build/src/model-meter.d.ts +1 -1
  80. package/build/src/model-pie.d.ts +1 -1
  81. package/build/src/model.d.ts +1 -9
  82. package/build/src/services/angle-utils.d.ts +1 -1
  83. package/build/src/services/curves.d.ts +2 -2
  84. package/build/src/services/essentials/dom-utils.d.ts +2 -2
  85. package/build/src/services/essentials/events.d.ts +1 -1
  86. package/build/src/services/essentials/gradient-utils.d.ts +1 -1
  87. package/build/src/services/essentials/transitions.d.ts +2 -2
  88. package/build/src/services/index.d.ts +7 -7
  89. package/build/src/services/scales-cartesian.d.ts +2 -2
  90. package/build/src/services/service.d.ts +1 -1
  91. package/build/src/services/time-series.d.ts +1 -1
  92. package/build/src/services/zoom.d.ts +2 -2
  93. package/build/src/tools.d.ts +2 -2
  94. package/build/stories/all.stories.d.ts +1 -1
  95. package/build/stories/tutorials/index.d.ts +11 -11
  96. package/build/stories/tutorials.stories.d.ts +1 -1
  97. package/bundle.js +1 -1
  98. package/chart.d.ts +3 -3
  99. package/chart.js +35 -35
  100. package/chart.js.map +1 -1
  101. package/charts/area-stacked.d.ts +2 -2
  102. package/charts/area-stacked.js +8 -8
  103. package/charts/area-stacked.js.map +1 -1
  104. package/charts/area.d.ts +2 -2
  105. package/charts/area.js +8 -8
  106. package/charts/area.js.map +1 -1
  107. package/charts/bar-grouped.d.ts +2 -2
  108. package/charts/bar-grouped.js +7 -7
  109. package/charts/bar-grouped.js.map +1 -1
  110. package/charts/bar-simple.d.ts +2 -2
  111. package/charts/bar-simple.js +7 -7
  112. package/charts/bar-simple.js.map +1 -1
  113. package/charts/bar-stacked.d.ts +2 -2
  114. package/charts/bar-stacked.js +7 -7
  115. package/charts/bar-stacked.js.map +1 -1
  116. package/charts/bubble.d.ts +2 -2
  117. package/charts/bubble.js +7 -7
  118. package/charts/bubble.js.map +1 -1
  119. package/charts/combo.d.ts +2 -2
  120. package/charts/combo.js +12 -12
  121. package/charts/combo.js.map +1 -1
  122. package/charts/donut.d.ts +2 -2
  123. package/charts/donut.js +7 -7
  124. package/charts/donut.js.map +1 -1
  125. package/charts/gauge.d.ts +3 -3
  126. package/charts/gauge.js +5 -5
  127. package/charts/gauge.js.map +1 -1
  128. package/charts/index.d.ts +16 -16
  129. package/charts/index.js +16 -16
  130. package/charts/index.js.map +1 -1
  131. package/charts/line.d.ts +2 -2
  132. package/charts/line.js +5 -5
  133. package/charts/line.js.map +1 -1
  134. package/charts/lollipop.d.ts +2 -2
  135. package/charts/lollipop.js +7 -7
  136. package/charts/lollipop.js.map +1 -1
  137. package/charts/meter.d.ts +3 -3
  138. package/charts/meter.js +18 -18
  139. package/charts/meter.js.map +1 -1
  140. package/charts/pie.d.ts +3 -3
  141. package/charts/pie.js +8 -8
  142. package/charts/pie.js.map +1 -1
  143. package/charts/radar.d.ts +2 -2
  144. package/charts/radar.js +5 -5
  145. package/charts/radar.js.map +1 -1
  146. package/charts/scatter.d.ts +2 -2
  147. package/charts/scatter.js +7 -7
  148. package/charts/scatter.js.map +1 -1
  149. package/charts/treemap.d.ts +2 -2
  150. package/charts/treemap.js +4 -4
  151. package/charts/treemap.js.map +1 -1
  152. package/components/axes/axis.d.ts +3 -3
  153. package/components/axes/axis.js +98 -98
  154. package/components/axes/axis.js.map +1 -1
  155. package/components/axes/chart-clip.d.ts +2 -2
  156. package/components/axes/chart-clip.js +9 -9
  157. package/components/axes/chart-clip.js.map +1 -1
  158. package/components/axes/grid-brush.d.ts +1 -1
  159. package/components/axes/grid-brush.js +32 -32
  160. package/components/axes/grid-brush.js.map +1 -1
  161. package/components/axes/grid.d.ts +1 -1
  162. package/components/axes/grid.js +34 -34
  163. package/components/axes/grid.js.map +1 -1
  164. package/components/axes/ruler-stacked.d.ts +1 -1
  165. package/components/axes/ruler-stacked.js +5 -5
  166. package/components/axes/ruler-stacked.js.map +1 -1
  167. package/components/axes/ruler.d.ts +2 -2
  168. package/components/axes/ruler.js +36 -36
  169. package/components/axes/ruler.js.map +1 -1
  170. package/components/axes/toolbar.d.ts +2 -2
  171. package/components/axes/toolbar.js +85 -85
  172. package/components/axes/toolbar.js.map +1 -1
  173. package/components/axes/two-dimensional-axes.d.ts +2 -2
  174. package/components/axes/two-dimensional-axes.js +13 -13
  175. package/components/axes/two-dimensional-axes.js.map +1 -1
  176. package/components/axes/zero-line.d.ts +1 -1
  177. package/components/axes/zero-line.js +12 -12
  178. package/components/axes/zero-line.js.map +1 -1
  179. package/components/axes/zoom-bar.d.ts +2 -2
  180. package/components/axes/zoom-bar.js +114 -114
  181. package/components/axes/zoom-bar.js.map +1 -1
  182. package/components/component.d.ts +1 -1
  183. package/components/component.js +13 -13
  184. package/components/component.js.map +1 -1
  185. package/components/essentials/legend.d.ts +1 -1
  186. package/components/essentials/legend.js +95 -92
  187. package/components/essentials/legend.js.map +1 -1
  188. package/components/essentials/threshold.d.ts +3 -3
  189. package/components/essentials/threshold.js +39 -39
  190. package/components/essentials/threshold.js.map +1 -1
  191. package/components/essentials/title-meter.d.ts +1 -1
  192. package/components/essentials/title-meter.js +42 -42
  193. package/components/essentials/title-meter.js.map +1 -1
  194. package/components/essentials/title.d.ts +1 -1
  195. package/components/essentials/title.js +19 -19
  196. package/components/essentials/title.js.map +1 -1
  197. package/components/essentials/tooltip-axis.d.ts +1 -1
  198. package/components/essentials/tooltip-axis.js +23 -23
  199. package/components/essentials/tooltip-axis.js.map +1 -1
  200. package/components/essentials/tooltip.d.ts +3 -3
  201. package/components/essentials/tooltip.js +31 -31
  202. package/components/essentials/tooltip.js.map +1 -1
  203. package/components/graphs/area-stacked.d.ts +1 -1
  204. package/components/graphs/area-stacked.js +28 -29
  205. package/components/graphs/area-stacked.js.map +1 -1
  206. package/components/graphs/area.d.ts +1 -1
  207. package/components/graphs/area.js +62 -57
  208. package/components/graphs/area.js.map +1 -1
  209. package/components/graphs/bar-grouped.d.ts +2 -2
  210. package/components/graphs/bar-grouped.js +56 -56
  211. package/components/graphs/bar-grouped.js.map +1 -1
  212. package/components/graphs/bar-simple.d.ts +1 -1
  213. package/components/graphs/bar-simple.js +45 -45
  214. package/components/graphs/bar-simple.js.map +1 -1
  215. package/components/graphs/bar-stacked.d.ts +1 -1
  216. package/components/graphs/bar-stacked.js +50 -51
  217. package/components/graphs/bar-stacked.js.map +1 -1
  218. package/components/graphs/bar.d.ts +1 -1
  219. package/components/graphs/bar.js +4 -4
  220. package/components/graphs/bar.js.map +1 -1
  221. package/components/graphs/bubble.d.ts +2 -2
  222. package/components/graphs/bubble.js +19 -19
  223. package/components/graphs/bubble.js.map +1 -1
  224. package/components/graphs/donut.d.ts +1 -1
  225. package/components/graphs/donut.js +20 -20
  226. package/components/graphs/donut.js.map +1 -1
  227. package/components/graphs/gauge.d.ts +1 -1
  228. package/components/graphs/gauge.js +89 -87
  229. package/components/graphs/gauge.js.map +1 -1
  230. package/components/graphs/line.d.ts +1 -1
  231. package/components/graphs/line.js +33 -33
  232. package/components/graphs/line.js.map +1 -1
  233. package/components/graphs/lollipop.d.ts +1 -1
  234. package/components/graphs/lollipop.js +32 -32
  235. package/components/graphs/lollipop.js.map +1 -1
  236. package/components/graphs/meter.d.ts +1 -1
  237. package/components/graphs/meter.js +39 -39
  238. package/components/graphs/meter.js.map +1 -1
  239. package/components/graphs/pie.d.ts +1 -1
  240. package/components/graphs/pie.js +102 -100
  241. package/components/graphs/pie.js.map +1 -1
  242. package/components/graphs/radar.d.ts +1 -1
  243. package/components/graphs/radar.js +180 -180
  244. package/components/graphs/radar.js.map +1 -1
  245. package/components/graphs/scatter-stacked.d.ts +1 -1
  246. package/components/graphs/scatter-stacked.js +22 -22
  247. package/components/graphs/scatter-stacked.js.map +1 -1
  248. package/components/graphs/scatter.d.ts +2 -2
  249. package/components/graphs/scatter.js +67 -66
  250. package/components/graphs/scatter.js.map +1 -1
  251. package/components/graphs/skeleton-lines.d.ts +1 -1
  252. package/components/graphs/skeleton-lines.js +27 -27
  253. package/components/graphs/skeleton-lines.js.map +1 -1
  254. package/components/graphs/skeleton.d.ts +1 -1
  255. package/components/graphs/skeleton.js +85 -85
  256. package/components/graphs/skeleton.js.map +1 -1
  257. package/components/graphs/treemap.d.ts +1 -1
  258. package/components/graphs/treemap.js +82 -82
  259. package/components/graphs/treemap.js.map +1 -1
  260. package/components/index.d.ts +36 -36
  261. package/components/index.js +36 -36
  262. package/components/index.js.map +1 -1
  263. package/components/layout/layout.d.ts +3 -3
  264. package/components/layout/layout.js +28 -28
  265. package/components/layout/layout.js.map +1 -1
  266. package/components/layout/spacer.d.ts +1 -1
  267. package/components/layout/spacer.js +10 -10
  268. package/components/layout/spacer.js.map +1 -1
  269. package/configuration-non-customizable.d.ts +7 -7
  270. package/configuration-non-customizable.js +37 -37
  271. package/configuration-non-customizable.js.map +1 -1
  272. package/configuration.d.ts +2 -2
  273. package/configuration.js +81 -78
  274. package/configuration.js.map +1 -1
  275. package/demo/create-codesandbox.d.ts +42 -42
  276. package/demo/create-codesandbox.js +100 -100
  277. package/demo/create-codesandbox.js.map +1 -1
  278. package/demo/data/area.js +220 -190
  279. package/demo/data/area.js.map +1 -1
  280. package/demo/data/bar.d.ts +2 -2
  281. package/demo/data/bar.js +302 -302
  282. package/demo/data/bar.js.map +1 -1
  283. package/demo/data/bubble.js +108 -108
  284. package/demo/data/bubble.js.map +1 -1
  285. package/demo/data/combo.js +323 -323
  286. package/demo/data/combo.js.map +1 -1
  287. package/demo/data/donut.js +19 -19
  288. package/demo/data/donut.js.map +1 -1
  289. package/demo/data/gauge.js +20 -20
  290. package/demo/data/gauge.js.map +1 -1
  291. package/demo/data/high-scale.js +3 -3
  292. package/demo/data/high-scale.js.map +1 -1
  293. package/demo/data/index.d.ts +13 -13
  294. package/demo/data/index.js +299 -299
  295. package/demo/data/index.js.map +1 -1
  296. package/demo/data/line.d.ts +4 -4
  297. package/demo/data/line.js +332 -332
  298. package/demo/data/line.js.map +1 -1
  299. package/demo/data/lollipop.js +19 -19
  300. package/demo/data/lollipop.js.map +1 -1
  301. package/demo/data/meter.d.ts +1 -1
  302. package/demo/data/meter.js +22 -22
  303. package/demo/data/meter.js.map +1 -1
  304. package/demo/data/pie.js +17 -17
  305. package/demo/data/pie.js.map +1 -1
  306. package/demo/data/radar.js +84 -84
  307. package/demo/data/radar.js.map +1 -1
  308. package/demo/data/scatter.js +125 -125
  309. package/demo/data/scatter.js.map +1 -1
  310. package/demo/data/step.js +11 -11
  311. package/demo/data/step.js.map +1 -1
  312. package/demo/data/time-series-axis.js +164 -164
  313. package/demo/data/time-series-axis.js.map +1 -1
  314. package/demo/data/toolbar.js +15 -15
  315. package/demo/data/toolbar.js.map +1 -1
  316. package/demo/data/treemap.js +63 -63
  317. package/demo/data/treemap.js.map +1 -1
  318. package/demo/data/zoom-bar.js +65 -65
  319. package/demo/data/zoom-bar.js.map +1 -1
  320. package/demo/styles.css +1 -1
  321. package/demo/styles.min.css +1 -1
  322. package/demo/tsconfig.tsbuildinfo +45 -45
  323. package/index.d.ts +3 -3
  324. package/index.js +3 -3
  325. package/index.js.map +1 -1
  326. package/interfaces/a11y.js.map +1 -1
  327. package/interfaces/axis-scales.d.ts +7 -7
  328. package/interfaces/axis-scales.js.map +1 -1
  329. package/interfaces/charts.d.ts +11 -4
  330. package/interfaces/charts.js.map +1 -1
  331. package/interfaces/components.d.ts +3 -3
  332. package/interfaces/components.js.map +1 -1
  333. package/interfaces/enums.d.ts +1 -1
  334. package/interfaces/enums.js +1 -1
  335. package/interfaces/enums.js.map +1 -1
  336. package/interfaces/events.js.map +1 -1
  337. package/interfaces/index.d.ts +7 -7
  338. package/interfaces/index.js +2 -2
  339. package/interfaces/index.js.map +1 -1
  340. package/interfaces/layout.d.ts +1 -1
  341. package/interfaces/layout.js.map +1 -1
  342. package/interfaces/model.d.ts +1 -1
  343. package/interfaces/model.js.map +1 -1
  344. package/model-cartesian-charts.d.ts +1 -1
  345. package/model-cartesian-charts.js +7 -7
  346. package/model-cartesian-charts.js.map +1 -1
  347. package/model-gauge.d.ts +1 -1
  348. package/model-gauge.js +2 -2
  349. package/model-gauge.js.map +1 -1
  350. package/model-meter.d.ts +1 -1
  351. package/model-meter.js +7 -7
  352. package/model-meter.js.map +1 -1
  353. package/model-pie.d.ts +1 -1
  354. package/model-pie.js +1 -1
  355. package/model-pie.js.map +1 -1
  356. package/model.d.ts +1 -9
  357. package/model.js +31 -42
  358. package/model.js.map +1 -1
  359. package/package.json +2 -3
  360. package/polyfills.js +9 -9
  361. package/polyfills.js.map +1 -1
  362. package/services/angle-utils.d.ts +1 -1
  363. package/services/angle-utils.js +9 -9
  364. package/services/angle-utils.js.map +1 -1
  365. package/services/curves.d.ts +2 -2
  366. package/services/curves.js +6 -6
  367. package/services/curves.js.map +1 -1
  368. package/services/essentials/dom-utils.d.ts +2 -2
  369. package/services/essentials/dom-utils.js +37 -37
  370. package/services/essentials/dom-utils.js.map +1 -1
  371. package/services/essentials/events.d.ts +1 -1
  372. package/services/essentials/events.js +3 -3
  373. package/services/essentials/events.js.map +1 -1
  374. package/services/essentials/gradient-utils.d.ts +1 -1
  375. package/services/essentials/gradient-utils.js +25 -25
  376. package/services/essentials/gradient-utils.js.map +1 -1
  377. package/services/essentials/transitions.d.ts +2 -2
  378. package/services/essentials/transitions.js +8 -8
  379. package/services/essentials/transitions.js.map +1 -1
  380. package/services/index.d.ts +7 -7
  381. package/services/index.js +7 -7
  382. package/services/index.js.map +1 -1
  383. package/services/scales-cartesian.d.ts +2 -2
  384. package/services/scales-cartesian.js +57 -60
  385. package/services/scales-cartesian.js.map +1 -1
  386. package/services/service.d.ts +1 -1
  387. package/services/service.js.map +1 -1
  388. package/services/time-series.d.ts +1 -1
  389. package/services/time-series.js +27 -27
  390. package/services/time-series.js.map +1 -1
  391. package/services/zoom.d.ts +2 -2
  392. package/services/zoom.js +20 -20
  393. package/services/zoom.js.map +1 -1
  394. package/styles/_type.scss +7 -7
  395. package/styles/color-palatte.scss +218 -218
  396. package/styles/colors.scss +3 -3
  397. package/styles/components/_axis.scss +5 -5
  398. package/styles/components/_ruler.scss +2 -2
  399. package/styles/components/_threshold.scss +1 -1
  400. package/styles/components/_title.scss +3 -3
  401. package/styles/components/_toolbar.scss +1 -1
  402. package/styles/components/_tooltip.scss +6 -6
  403. package/styles/components/index.scss +16 -16
  404. package/styles/graphs/_bubble.scss +1 -1
  405. package/styles/graphs/_radar.scss +2 -2
  406. package/styles/graphs/_scatter.scss +1 -1
  407. package/styles/graphs/_treemap.scss +1 -1
  408. package/styles/graphs/index.scss +9 -9
  409. package/styles/styles-g10.scss +2 -2
  410. package/styles/styles-g100.scss +2 -2
  411. package/styles/styles-g90.scss +2 -2
  412. package/styles/styles-white.scss +2 -2
  413. package/styles/styles.scss +10 -10
  414. package/tools.d.ts +2 -2
  415. package/tools.js +26 -26
  416. package/tools.js.map +1 -1
  417. package/tsconfig.tsbuildinfo +173 -173
@@ -1 +1 @@
1
- {"version":3,"file":"axis.js","sourceRoot":"","sources":["axis.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EACN,aAAa,EACb,MAAM,EACN,UAAU,EACV,KAAK,EACL,eAAe,EACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AACrD,OAAO,EACN,uBAAuB,EACvB,UAAU,EACV,aAAa,EACb,MAAM,4BAA4B,CAAC;AAEpC,aAAa;AACb,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEnE;IAA0B,wBAAS;IAQlC,cAAY,KAAiB,EAAE,QAAa,EAAE,OAAa;QAA3D,YACC,kBAAM,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,SAO/B;QAfD,UAAI,GAAG,MAAM,CAAC;QAUb,IAAI,OAAO,EAAE;YACZ,KAAI,CAAC,OAAO,GAAG,OAAO,CAAC;SACvB;QAED,KAAI,CAAC,OAAO,GAAG,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC;;IACrC,CAAC;IAED,qBAAM,GAAN,UAAO,OAAc;QAAd,wBAAA,EAAA,cAAc;QACZ,IAAA,oCAAsB,CAAkB;QAChD,IAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,IAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CACtC,OAAO,EACP,MAAM,EACN,YAAY,EACZ,SAAS,CACT,CAAC;QAEF,IAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC7B,IAAA;;UAEJ,EAFM,gBAAK,EAAE,kBAEb,CAAC;QACH,2BAA2B;QAC3B,IAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CACxC,GAAG,EACH,YAAU,YAAc,CACxB,CAAC;QACF,IAAI,aAAa,EAAE,WAAW,CAAC;QAC/B,IACC,YAAY,KAAK,aAAa,CAAC,MAAM;YACrC,YAAY,KAAK,aAAa,CAAC,GAAG,EACjC;YACD,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;gBACpD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI;gBACnB,CAAC,CAAC,CAAC,CAAC;YACL,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;gBACnD,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK;gBAC5B,CAAC,CAAC,KAAK,CAAC;SACT;aAAM;YACN,aAAa,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAC7C,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;SAC/B;QAED,2CAA2C;QAC3C,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,kBAAkB,CAC7D,YAAY,CACZ,CAAC;QAEF,IAAI,IAAI,CAAC,SAAS,KAAK,UAAU,CAAC,MAAM,EAAE;YACzC,KAAK,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;SAC/C;aAAM;YACN,KAAK,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;SAC1C;QAED,8CAA8C;QAC9C,IAAI,YAAY,CAAC;QACjB,QAAQ,YAAY,EAAE;YACrB,KAAK,aAAa,CAAC,IAAI;gBACtB,YAAY,GAAG,QAAQ,CAAC;gBACxB,MAAM;YACP,KAAK,aAAa,CAAC,MAAM;gBACxB,YAAY,GAAG,UAAU,CAAC;gBAC1B,MAAM;YACP,KAAK,aAAa,CAAC,KAAK;gBACvB,YAAY,GAAG,SAAS,CAAC;gBACzB,MAAM;YACP,KAAK,aAAa,CAAC,GAAG;gBACrB,YAAY,GAAG,OAAO,CAAC;gBACvB,MAAM;SACP;QAED,SAAS,CAAC,IAAI,CAAC,YAAY,EAAK,YAAY,UAAO,CAAC,CAAC;QACrD,IAAM,aAAa,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;QAC3D,IAAI,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC5D,IAAI,CAAC,aAAa,EAAE;YACnB,OAAO,CAAC,IAAI,CAAC,MAAM,EAAK,KAAK,CAAC,eAAe,SAAI,KAAK,CAAC,KAAO,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAK,YAAY,WAAQ,CAAC,CAAC;SACpD;QAED,2EAA2E;QAC3E,wFAAwF;QACxF,mEAAmE;QACnE,IAAM,gBAAgB,GAAG,QAAQ,CAAC,cAAc,CAC/C,SAAS,EACT,mBAAmB,CACnB;aACC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC;aACrB,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC;aAC/B,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC;aACzB,IAAI,CAAC,YAAY,EAAE,eAAa,YAAY,WAAQ,CAAC,CAAC;QAExD,IAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;QACrE,IAAM,eAAe,GACpB,IAAI,CAAC,SAAS,KAAK,UAAU,CAAC,IAAI;YAClC,WAAW,CAAC,SAAS,KAAK,UAAU,CAAC,IAAI,CAAC;QAC3C,IAAM,cAAc,GACnB,YAAY,KAAK,aAAa,CAAC,IAAI;YACnC,YAAY,KAAK,aAAa,CAAC,KAAK,CAAC;QAEtC,oFAAoF;QACpF,qCAAqC;QACrC,IAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAChD,IAAI,UAAU,IAAI,eAAe,IAAI,CAAC,cAAc,EAAE;YACrD,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;SACzB;QAED,IAAI,CAAC,aAAa,EAAE;YACnB,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YAClC,OAAO;SACP;QAED,IAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAClE,IAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACpE,IAAM,qBAAqB,GAAG,KAAK,CAAC,WAAW,CAC9C,WAAW,EACX,OAAO,EACP,QAAQ,CACR,CAAC;QAEF,gDAAgD;QAChD,kDAAkD;QAClD,IAAM,sBAAsB,GAAG,KAAK,CAAC,WAAW,CAC/C,WAAW,EACX,OAAO,EACP,QAAQ,CACR,CAAC;QAEF,iDAAiD;QACjD,IAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CACvC,WAAW,EACX,YAAY,EACZ,MAAM,CACN,CAAC;QACF,IAAM,mBAAmB,GAAG,KAAK,CAAC,WAAW,CAC5C,WAAW,EACX,YAAY,EACZ,WAAW,CACX,CAAC;QACF,IAAM,sBAAsB,GAAG,KAAK,CAAC,WAAW,CAC/C,WAAW,EACX,YAAY,EACZ,cAAc,CACd,CAAC;QAEF,IAAM,uBAAuB,GAAG,qBAAqB,KAAK,IAAI,CAAC;QAC/D,IAAM,gBAAgB,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAEjE,kEAAkE;QAClE,IAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QACrE,IAAM,YAAY,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,CAClE,GAAG,CACH,CAAC;QACF,IAAM,UAAU,GAAG,QAAQ,CAAC,iBAAiB,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE;YAClE,OAAO,EAAE,IAAI;SACb,CAAC,CAAC,MAAM,CAAC;QACV,QAAQ,CAAC,MAAM,EAAE,CAAC;QAElB,IAAM,SAAS,GACd,IAAI,CAAC,SAAS,IAAI,WAAW,CAAC,SAAS,IAAI,UAAU,CAAC,MAAM,CAAC;QAE9D,yBAAyB;QACzB,IAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAElD,IAAI,KAAK,CAAC,KAAK,EAAE;YAChB,IAAI,aAAa,SAAA,CAAC;YAElB,IAAI,uBAAuB,EAAE;gBAC5B,aAAa,GAAG,qBAAqB,CAAC;aACtC;iBAAM;gBACN,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;gBAChD,IAAI,cAAc,EAAE;oBACnB,qCAAqC;oBACrC,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAC3C,MAAM,EACN,UAAU,EACV,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAC3C,CAAC;iBACF;aACD;YAED,mBAAmB;YACnB,8BAA8B;YAC9B,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;gBACzD,aAAa,GAAG,CAAC,CAAC;aAClB;YAED,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAE1B,IAAI,eAAe,EAAE;gBACpB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE;oBACvC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;iBACpB;qBAAM;oBACN,IAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CACxC,OAAO,EACP,WAAW,EACX,iBAAiB,CACjB,CAAC;oBAEF,IAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CACrC,OAAO,EACP,MAAM,EACN,YAAY,EACZ,QAAQ,CACR,CAAC;oBAEF,IAAI,UAAU,SAAA,CAAC;oBACf,iFAAiF;oBACjF,mEAAmE;oBACnE,IAAM,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;oBAC/B,IAAI,eAAe,IAAI,CAAC,YAAY,EAAE;wBACrC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;qBAC9B;oBACD,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;oBAE5C,6BAA6B;oBAC7B,0CAA0C;oBAC1C,IACC,eAAe;wBACf,UAAU,CAAC,MAAM,GAAG,CAAC;wBACrB,CAAC,YAAY,EACZ;wBACD,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;wBAC5C,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;qBACxB;oBAED,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;iBAC5B;aACD;SACD;QAED,mCAAmC;QACnC,IAAI,SAAS,CAAC;QACd,IAAM,qBAAqB,GAAG,KAAK,CAAC,WAAW,CAC9C,WAAW,EACX,OAAO,EACP,WAAW,CACX,CAAC;QACF,IAAI,eAAe,EAAE;YACpB,IAAM,cAAY,GAAG,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YAChE,IAAI,qBAAqB,KAAK,IAAI,EAAE;gBACnC,SAAS,GAAG,UAAC,CAAS,EAAE,CAAS;oBAChC,OAAA,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,cAAY,EAAE,gBAAgB,CAAC;gBAAhD,CAAgD,CAAC;aAClD;iBAAM;gBACN,SAAS,GAAG,UAAC,CAAS,EAAE,CAAS;oBAChC,IAAM,qBAAqB,GAAG,UAAU,CACvC,CAAC,EACD,CAAC,EACD,cAAY,EACZ,gBAAgB,CAChB,CAAC;oBACF,OAAO,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,qBAAqB,CAAC,CAAC;gBAC3D,CAAC,CAAC;aACF;SACD;aAAM;YACN,IAAI,qBAAqB,KAAK,IAAI,EAAE;gBACnC,IAAI,SAAS,KAAK,UAAU,CAAC,MAAM,EAAE;oBACpC,SAAS,GAAG,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,cAAc,EAAE,EAAlB,CAAkB,CAAC;iBACtC;aACD;iBAAM;gBACN,SAAS,GAAG,qBAAqB,CAAC;aAClC;SACD;QAED,sBAAsB;QACtB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAE3B,wEAAwE;QACxE,qFAAqF;QAC/E,IAAA;;qBAKI,EAJT,kBAAU,EACV,kBAGS,CAAC;QACX,IAAI,UAAU,CAAC;QACf,IAAI,sBAAsB,EAAE;YAC3B,IAAI,eAAe,EAAE;gBACpB,qCAAqC;gBACrC,sBAAsB,CAAC,OAAO,CAAC,UAAC,qBAAqB,EAAE,CAAC;oBACvD,IAAI,qBAAqB,CAAC,OAAO,KAAK,SAAS,EAAE;wBAChD,sBAAsB,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CACnC,qBAAqB,CACrB,CAAC;qBACF;gBACF,CAAC,CAAC,CAAC;gBAEH,sDAAsD;gBACtD,UAAU,GAAG,sBAAsB,CAAC,MAAM,CAAC,UAAC,IAAI;oBAC/C,IAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;oBACrC,OAAO,CACN,aAAa,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE;wBAC/C,aAAa,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAC/C,CAAC;gBACH,CAAC,CAAC,CAAC;aACH;iBAAM,IAAI,aAAa,KAAK,UAAU,CAAC,MAAM,EAAE;gBAC/C,IAAM,gBAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe;qBAClD,kBAAkB,CAAC,YAAY,CAAC;qBAChC,MAAM,EAAE,CAAC;gBACX,UAAU,GAAG,sBAAsB,CAAC,MAAM,CAAC,UAAC,IAAI;oBAC/C,OAAA,gBAAc,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAA7B,CAA6B,CAC7B,CAAC;aACF;iBAAM;gBACN,oBAAoB;gBACpB,UAAU,GAAG,sBAAsB,CAAC,MAAM,CACzC,UAAC,IAAI,IAAK,OAAA,IAAI,IAAI,UAAU,IAAI,IAAI,IAAI,UAAU,EAAxC,CAAwC,CAClD,CAAC;aACF;YAED,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;SAC5B;QAED,mCAAmC;QACnC,QAAQ,YAAY,EAAE;YACrB,KAAK,aAAa,CAAC,IAAI;gBACtB,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,eAAa,IAAI,CAAC,OAAO,CAAC,IAAI,SAAM,CAAC,CAAC;gBAChE,MAAM;YACP,KAAK,aAAa,CAAC,MAAM;gBACxB,OAAO,CAAC,IAAI,CACX,WAAW,EACX,mBAAgB,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,OAAG,CAC/C,CAAC;gBACF,MAAM;YACP,KAAK,aAAa,CAAC,KAAK;gBACvB,OAAO,CAAC,IAAI,CACX,WAAW,EACX,gBAAa,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,UAAM,CAC7C,CAAC;gBACF,MAAM;YACP,KAAK,aAAa,CAAC,GAAG;gBACrB,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAgB,IAAI,CAAC,OAAO,CAAC,GAAG,MAAG,CAAC,CAAC;gBAC/D,MAAM;SACP;QAED,0BAA0B;QAC1B,qEAAqE;QACrE,IAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAC7C,IAAI,WAAW,CAAC,KAAK,EAAE;YACtB,IAAM,YAAY,GAAG,QAAQ,CAAC,cAAc,CAC3C,SAAS,EACT,iBAAiB,CACjB,CAAC,IAAI,CAAC,WAAW,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAE9D,QAAQ,YAAY,EAAE;gBACrB,KAAK,aAAa,CAAC,IAAI;oBACtB,YAAY;yBACV,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC;yBAChC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;yBACZ,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;yBAClC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;yBACjB,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;oBACjC,MAAM;gBACP,KAAK,aAAa,CAAC,MAAM;oBACxB,YAAY;yBACV,IAAI,CACJ,WAAW,EACX,gBACC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,WACxC,MAAM,MAAG,CACd;yBACA,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;oBACjC,MAAM;gBACP,KAAK,aAAa,CAAC,KAAK;oBACvB,YAAY;yBACV,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC;yBAC/B,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;yBACjB,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;yBAC/B,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;yBACjB,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;oBACjC,MAAM;gBACP,KAAK,aAAa,CAAC,GAAG;oBACb,IAAA;;6BAAmB,CAKzB;oBACF,YAAY;yBACV,IAAI,CACJ,WAAW,EACX,gBACC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,WACxC,WAAW,GAAG,CAAC,MAAG,CACvB;yBACA,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;oBACjC,MAAM;aACP;SACD;QAED,qCAAqC;QACrC,IAAI,eAAe,EAAE;YACpB,IAAM,cAAY,GAAG,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YAChE,IAAM,aAAW,GAAG,gBAAgB,CAAC,WAAW,CAAC;YACjD,IAAM,gBAAgB,GAAG,OAAO,CAAC;YAEjC,IAAI,OAAO,EAAE;gBACZ,OAAO,GAAG,OAAO,CAAC,UAAU,CAC3B,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CACtC,aAAa,EACb,OAAO,CACP,CACD,CAAC;aACF;YACD,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE7B,oEAAoE;YACpE,IAAM,KAAK,GAAG,gBAAgB;iBAC5B,SAAS,CAAC,OAAO,CAAC;iBAClB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC;iBAC9B,KAAK,EAAE;iBACP,MAAM,CAAC,MAAM,CAAC,CAAC;YACjB,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,UAAC,SAAiB,EAAE,CAAS;gBACvD,OAAO,aAAa,CAAC,SAAS,EAAE,CAAC,EAAE,cAAY,EAAE,aAAW,CAAC;oBAC5D,CAAC,CAAC,MAAM;oBACR,CAAC,CAAC,QAAQ,CAAC;YACb,CAAC,CAAC,CAAC;SACH;aAAM;YACN,IAAI,CAAC,OAAO,IAAI,CAAC,aAAa,EAAE;gBAC/B,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC7B;iBAAM;gBACN,OAAO,GAAG,OAAO;qBACf,UAAU,CACV,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC,CACtD;qBACA,IAAI,CAAC,IAAI,CAAC,CAAC;aACb;SACD;QAED,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE5B,IACC,YAAY,KAAK,aAAa,CAAC,MAAM;YACrC,YAAY,KAAK,aAAa,CAAC,GAAG,EACjC;YACD,IAAI,iBAAiB,GAAG,KAAK,CAAC;YAC9B,6EAA6E;YAC7E,IAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CACrC,WAAW,EACX,OAAO,EACP,UAAU,CACV,CAAC;YAEF,IAAI,YAAY,KAAK,aAAa,CAAC,MAAM,EAAE;gBAC1C,iBAAiB,GAAG,IAAI,CAAC;aACzB;iBAAM,IAAI,YAAY,KAAK,aAAa,CAAC,KAAK,EAAE;gBAChD,iBAAiB,GAAG,KAAK,CAAC;aAC1B;iBAAM,IAAI,CAAC,YAAY,IAAI,YAAY,KAAK,aAAa,CAAC,IAAI,EAAE;gBAChE,0CAA0C;gBAE1C,kEAAkE;gBAClE,8CAA8C;gBAC9C,mDAAmD;gBACnD,IAAI,KAAK,CAAC,IAAI,EAAE;oBACf,IAAM,SAAS,GAAG,gBAAgB;yBAChC,SAAS,CAAC,aAAa,CAAC;yBACxB,KAAK,EAAE,CAAC;oBAEV,uDAAuD;oBACvD,iBAAiB,GAAG,SAAS,CAAC,IAAI,CACjC,UAAC,QAAQ;wBACR,OAAA,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,EAAE;4BACpC,OAAO,EAAE,IAAI;yBACb,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE;oBAFxB,CAEwB,CACzB,CAAC;iBACF;qBAAM;oBACN,uCAAuC;oBACvC,sDAAsD;oBACtD,IAAM,WAAW,GAChB,KAAK,CAAC,WAAW,CAChB,WAAW,EACX,OAAO,EACP,qBAAqB,CACrB,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;oBACnD,IAAM,WAAW,GAAG,eAAe;wBAClC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM;wBAC1B,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC;oBACxB,IAAM,iBAAiB,GAAG,KAAK,GAAG,WAAW,GAAG,CAAC,CAAC;oBAClD,iBAAiB,GAAG,eAAe;wBAClC,CAAC,CAAC,iBAAiB,GAAG,WAAW,GAAG,CAAC,CAAC,mCAAmC;wBACzE,CAAC,CAAC,iBAAiB,GAAG,WAAW,CAAC;iBACnC;aACD;YAED,IAAI,iBAAiB,EAAE;gBACtB,IAAI,CAAC,uBAAuB,EAAE;oBAC7B,IAAI,CAAC,KAAK,CACT,IAAI,CAAC,uBAAuB,CAC3B,KAAK,EACL,UAAU,EACV,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAC7C,CACD,CAAC;oBAEF,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC5B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACnB;gBAED,SAAS;qBACP,SAAS,CAAC,qBAAqB,CAAC;qBAChC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC;qBAChC,KAAK,CACL,aAAa,EACb,YAAY,KAAK,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CACpD,CAAC;aACH;iBAAM;gBACN,SAAS;qBACP,SAAS,CAAC,qBAAqB,CAAC;qBAChC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;qBACvB,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;aAC7B;SACD;QAED,kEAAkE;QAClE,4CAA4C;QAC5C,IAAI,aAAa,EAAE;YAClB,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;SAC7B;aAAM;YACN,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;SAC7B;QAED,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,EAAD,CAAC,CAAC,CAAC;QAEzD,gBAAgB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,EAAD,CAAC,CAAC,CAAC;QAElE,sCAAsC;QACtC,gCAAgC;QAChC,IACC,cAAc,KAAK,eAAe,CAAC,IAAI;YACvC,aAAa,KAAK,UAAU,CAAC,MAAM;YACnC,CAAC,sBAAsB,EACtB;YACD,IAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,CAClE,YAAY,CACZ,CAAC;YACF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC9B,IAAM,SAAS,GAAG,GAAG;qBACnB,MAAM,CAAC,YAAU,YAAY,oBAAiB,CAAC;qBAC/C,IAAI,EAAE,CAAC;gBAET,SAAS,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAEtD,SAAS;qBACP,SAAS,CAAC,aAAa,CAAC;qBACxB,IAAI,CAAC,cAAc,CAAC;qBACpB,IAAI,CAAC,UAAU,CAAC;oBAChB,IAAI,CAAC,CAAC,MAAM,GAAG,mBAAmB,EAAE;wBACnC,OAAO,KAAK,CAAC,aAAa,CACzB,CAAC,EACD,cAAc,EACd,sBAAsB,CACtB,CAAC;qBACF;yBAAM;wBACN,OAAO,CAAC,CAAC;qBACT;gBACF,CAAC,CAAC,CAAC;gBAEJ,IAAI,CAAC,mBAAmB,EAAE;qBACxB,SAAS,CAAC,aAAa,CAAC;qBACxB,IAAI,CAAC,cAAc,CAAC;qBACpB,IAAI,CAAC,UAAU,CAAC;oBAChB,IAAI,CAAC,CAAC,MAAM,GAAG,mBAAmB,EAAE;wBACnC,OAAO,KAAK,CAAC,aAAa,CACzB,CAAC,EACD,cAAc,EACd,sBAAsB,CACtB,CAAC;qBACF;yBAAM;wBACN,OAAO,CAAC,CAAC;qBACT;gBACF,CAAC,CAAC,CAAC;gBAEJ,SAAS;qBACP,SAAS,CAAC,SAAS,CAAC;qBACpB,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;gBAE1C,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;aACxD;SACD;QACD,wCAAwC;QACxC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC1B,CAAC;IAED,gCAAiB,GAAjB;QACC,IAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC3B,IAAA,oCAAsB,CAAkB;QAChD,IAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CACxC,GAAG,EACH,YAAU,YAAc,CACxB,CAAC;QACF,IAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,IAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;QACrE,IAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAClE,IAAM,mBAAmB,GAAG,KAAK,CAAC,WAAW,CAC5C,WAAW,EACX,YAAY,EACZ,WAAW,CACX,CAAC;QAEF,IAAM,eAAe,GACpB,IAAI,CAAC,SAAS,KAAK,UAAU,CAAC,IAAI;YAClC,WAAW,CAAC,SAAS,KAAK,UAAU,CAAC,IAAI,CAAC;QAE3C,IAAM,IAAI,GAAG,IAAI,CAAC;QAClB,SAAS;aACP,SAAS,CAAC,aAAa,CAAC;aACxB,EAAE,CAAC,WAAW,EAAE,UAAU,KAAK;YAC/B,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CACjC,MAAM,CAAC,IAAI,CAAC,eAAe,EAC3B;gBACC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;gBACrB,KAAK,OAAA;aACL,CACD,CAAC;YAEF,IACC,aAAa,KAAK,UAAU,CAAC,MAAM;gBACnC,KAAK,CAAC,MAAM,GAAG,mBAAmB,EACjC;gBACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;oBACvD,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC;oBAC5B,OAAO,EAAE,KAAK;iBACd,CAAC,CAAC;aACH;QACF,CAAC,CAAC;aACD,EAAE,CAAC,WAAW,EAAE,UAAU,KAAK;YAC/B,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CACjC,MAAM,CAAC,IAAI,CAAC,eAAe,EAC3B;gBACC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;gBACrB,KAAK,OAAA;aACL,CACD,CAAC;YACF,IACC,aAAa,KAAK,UAAU,CAAC,MAAM;gBACnC,KAAK,CAAC,MAAM,GAAG,mBAAmB,EACjC;gBACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aACxD;QACF,CAAC,CAAC;aACD,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK;YAC3B,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE;gBAC3D,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;gBACrB,KAAK,OAAA;aACL,CAAC,CAAC;QACJ,CAAC,CAAC;aACD,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK;YAC9B,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE;gBAC9D,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;gBACrB,KAAK,OAAA;aACL,CAAC,CAAC;YACH,IAAI,aAAa,KAAK,UAAU,CAAC,MAAM,EAAE;gBACxC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aACxD;QACF,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kCAAmB,GAAnB;QACS,IAAA,oCAAsB,CAAkB;QAEhD,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,CACnC,YAAU,YAAY,uBAAoB,CAC1C,CAAC;IACH,CAAC;IAED,0BAAW,GAAX;QACS,IAAA,oCAAsB,CAAkB;QAEhD,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,CACnC,YAAU,YAAY,qBAAkB,CACxC,CAAC;IACH,CAAC;IAED,sCAAuB,GAAvB,UAAwB,IAAI,EAAE,QAAQ,EAAE,UAAU;QACjD,IAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC;QACpE,OAAO,KAAK,CAAC,KAAK,CACjB,gBAAgB,EAChB,CAAC,EACD,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAC/B,CAAC;IACH,CAAC;IAED,sBAAO,GAAP;QACC,IAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC3B,IAAA,oCAAsB,CAAkB;QAChD,IAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CACxC,GAAG,EACH,YAAU,YAAc,CACxB,CAAC;QAEF,yBAAyB;QACzB,SAAS;aACP,SAAS,CAAC,aAAa,CAAC;aACxB,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC;aACrB,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC;aACrB,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC;IACF,WAAC;AAAD,CAAC,AArsBD,CAA0B,SAAS,GAqsBlC","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport {\n\tAxisPositions,\n\tEvents,\n\tScaleTypes,\n\tRoles,\n\tTruncationTypes\n} from \"../../interfaces\";\nimport { Tools } from \"../../tools\";\nimport { ChartModel } from \"../../model\";\nimport { DOMUtils } from \"../../services\";\nimport { TickRotations } from \"../../interfaces/enums\";\nimport * as Configuration from \"../../configuration\";\nimport {\n\tcomputeTimeIntervalName,\n\tformatTick,\n\tisTickPrimary\n} from \"../../services/time-series\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\nimport { axisBottom, axisLeft, axisRight, axisTop } from \"d3-axis\";\n\nexport class Axis extends Component {\n\ttype = \"axes\";\n\n\tmargins: any;\n\n\tscale: any;\n\tscaleType: ScaleTypes;\n\n\tconstructor(model: ChartModel, services: any, configs?: any) {\n\t\tsuper(model, services, configs);\n\n\t\tif (configs) {\n\t\t\tthis.configs = configs;\n\t\t}\n\n\t\tthis.margins = this.configs.margins;\n\t}\n\n\trender(animate = true) {\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst options = this.getOptions();\n\t\tconst isAxisVisible = Tools.getProperty(\n\t\t\toptions,\n\t\t\t\"axes\",\n\t\t\taxisPosition,\n\t\t\t\"visible\"\n\t\t);\n\n\t\tconst svg = this.getContainerSVG();\n\t\tconst { width, height } = DOMUtils.getSVGElementSize(this.parent, {\n\t\t\tuseAttrs: true\n\t\t});\n\t\t// Add axis into the parent\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\t\tlet startPosition, endPosition;\n\t\tif (\n\t\t\taxisPosition === AxisPositions.BOTTOM ||\n\t\t\taxisPosition === AxisPositions.TOP\n\t\t) {\n\t\t\tstartPosition = this.configs.axes[AxisPositions.LEFT]\n\t\t\t\t? this.margins.left\n\t\t\t\t: 0;\n\t\t\tendPosition = this.configs.axes[AxisPositions.RIGHT]\n\t\t\t\t? width - this.margins.right\n\t\t\t\t: width;\n\t\t} else {\n\t\t\tstartPosition = height - this.margins.bottom;\n\t\t\tendPosition = this.margins.top;\n\t\t}\n\n\t\t// Grab the scale off of the Scales service\n\t\tconst scale = this.services.cartesianScales.getScaleByPosition(\n\t\t\taxisPosition\n\t\t);\n\n\t\tif (this.scaleType === ScaleTypes.LABELS) {\n\t\t\tscale.rangeRound([startPosition, endPosition]);\n\t\t} else {\n\t\t\tscale.range([startPosition, endPosition]);\n\t\t}\n\n\t\t// Identify the corresponding d3 axis function\n\t\tlet axisFunction;\n\t\tswitch (axisPosition) {\n\t\t\tcase AxisPositions.LEFT:\n\t\t\t\taxisFunction = axisLeft;\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\taxisFunction = axisBottom;\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\taxisFunction = axisRight;\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.TOP:\n\t\t\t\taxisFunction = axisTop;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tcontainer.attr(\"aria-label\", `${axisPosition} axis`);\n\t\tconst axisRefExists = !container.select(`g.ticks`).empty();\n\t\tlet axisRef = DOMUtils.appendOrSelect(container, `g.ticks`);\n\t\tif (!axisRefExists) {\n\t\t\taxisRef.attr(\"role\", `${Roles.GRAPHICS_OBJECT} ${Roles.GROUP}`);\n\t\t\taxisRef.attr(\"aria-label\", `${axisPosition} ticks`);\n\t\t}\n\n\t\t// We draw the invisible axis because of the async nature of d3 transitions\n\t\t// To be able to tell the final width & height of the axis when initiaing the transition\n\t\t// The invisible axis is updated instantly and without a transition\n\t\tconst invisibleAxisRef = DOMUtils.appendOrSelect(\n\t\t\tcontainer,\n\t\t\t`g.ticks.invisible`\n\t\t)\n\t\t\t.style(\"opacity\", \"0\")\n\t\t\t.style(\"pointer-events\", \"none\")\n\t\t\t.attr(\"aria-hidden\", true)\n\t\t\t.attr(\"aria-label\", `invisible ${axisPosition} ticks`);\n\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", axisPosition);\n\t\tconst isTimeScaleType =\n\t\t\tthis.scaleType === ScaleTypes.TIME ||\n\t\t\taxisOptions.scaleType === ScaleTypes.TIME;\n\t\tconst isVerticalAxis =\n\t\t\taxisPosition === AxisPositions.LEFT ||\n\t\t\taxisPosition === AxisPositions.RIGHT;\n\n\t\t// if zoomDomain is available, scale type is time, and axis position isBOTTOM or TOP\n\t\t// update scale domain to zoomDomain.\n\t\tconst zoomDomain = this.model.get(\"zoomDomain\");\n\t\tif (zoomDomain && isTimeScaleType && !isVerticalAxis) {\n\t\t\tscale.domain(zoomDomain);\n\t\t}\n\n\t\tif (!isAxisVisible) {\n\t\t\taxisRef.attr(\"aria-hidden\", true);\n\t\t\treturn;\n\t\t}\n\n\t\tconst axisScaleType = Tools.getProperty(axisOptions, \"scaleType\");\n\t\tconst isDataLoading = Tools.getProperty(options, \"data\", \"loading\");\n\t\tconst numberOfTicksProvided = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"ticks\",\n\t\t\t\"number\"\n\t\t);\n\n\t\t// user can provide custom ticks to be displayed\n\t\t// ticks need to be in the domain of the axis data\n\t\tconst userProvidedTickValues = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"ticks\",\n\t\t\t\"values\"\n\t\t);\n\n\t\t// get user provided custom values for truncation\n\t\tconst truncationType = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"truncation\",\n\t\t\t\"type\"\n\t\t);\n\t\tconst truncationThreshold = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"truncation\",\n\t\t\t\"threshold\"\n\t\t);\n\t\tconst truncationNumCharacter = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"truncation\",\n\t\t\t\"numCharacter\"\n\t\t);\n\n\t\tconst isNumberOfTicksProvided = numberOfTicksProvided !== null;\n\t\tconst timeScaleOptions = Tools.getProperty(options, \"timeScale\");\n\n\t\t// Append to DOM a fake tick to get the right computed font height\n\t\tconst fakeTick = DOMUtils.appendOrSelect(invisibleAxisRef, `g.tick`);\n\t\tconst fakeTickText = DOMUtils.appendOrSelect(fakeTick, `text`).text(\n\t\t\t\"0\"\n\t\t);\n\t\tconst tickHeight = DOMUtils.getSVGElementSize(fakeTickText.node(), {\n\t\t\tuseBBox: true\n\t\t}).height;\n\t\tfakeTick.remove();\n\n\t\tconst scaleType =\n\t\t\tthis.scaleType || axisOptions.scaleType || ScaleTypes.LINEAR;\n\n\t\t// Initialize axis object\n\t\tconst axis = axisFunction(scale).tickSizeOuter(0);\n\n\t\tif (scale.ticks) {\n\t\t\tlet numberOfTicks;\n\n\t\t\tif (isNumberOfTicksProvided) {\n\t\t\t\tnumberOfTicks = numberOfTicksProvided;\n\t\t\t} else {\n\t\t\t\tnumberOfTicks = Configuration.axis.ticks.number;\n\t\t\t\tif (isVerticalAxis) {\n\t\t\t\t\t// Set how many ticks based on height\n\t\t\t\t\tnumberOfTicks = this.getNumberOfFittingTicks(\n\t\t\t\t\t\theight,\n\t\t\t\t\t\ttickHeight,\n\t\t\t\t\t\tConfiguration.axis.ticks.verticalSpaceRatio\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// scale continuous\n\t\t\t// remove 0 ticks for skeleton\n\t\t\tif (scale.ticks().length === 1 && scale.ticks()[0] === 0) {\n\t\t\t\tnumberOfTicks = 0;\n\t\t\t}\n\n\t\t\taxis.ticks(numberOfTicks);\n\n\t\t\tif (isTimeScaleType) {\n\t\t\t\tif (!scale.ticks(numberOfTicks).length) {\n\t\t\t\t\taxis.tickValues([]);\n\t\t\t\t} else {\n\t\t\t\t\tconst addSpaceOnEdges = Tools.getProperty(\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\"timeScale\",\n\t\t\t\t\t\t\"addSpaceOnEdges\"\n\t\t\t\t\t);\n\n\t\t\t\t\tconst customDomain = Tools.getProperty(\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\"axes\",\n\t\t\t\t\t\taxisPosition,\n\t\t\t\t\t\t\"domain\"\n\t\t\t\t\t);\n\n\t\t\t\t\tlet tickValues;\n\t\t\t\t\t// scale.nice() will change scale domain which causes extra space near chart edge\n\t\t\t\t\t// so use another scale instance to avoid impacts to original scale\n\t\t\t\t\tconst tempScale = scale.copy();\n\t\t\t\t\tif (addSpaceOnEdges && !customDomain) {\n\t\t\t\t\t\ttempScale.nice(numberOfTicks);\n\t\t\t\t\t}\n\t\t\t\t\ttickValues = tempScale.ticks(numberOfTicks);\n\n\t\t\t\t\t// Remove labels on the edges\n\t\t\t\t\t// If there are more than 2 labels to show\n\t\t\t\t\tif (\n\t\t\t\t\t\taddSpaceOnEdges &&\n\t\t\t\t\t\ttickValues.length > 2 &&\n\t\t\t\t\t\t!customDomain\n\t\t\t\t\t) {\n\t\t\t\t\t\ttickValues.splice(tickValues.length - 1, 1);\n\t\t\t\t\t\ttickValues.splice(0, 1);\n\t\t\t\t\t}\n\n\t\t\t\t\taxis.tickValues(tickValues);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// create the right ticks formatter\n\t\tlet formatter;\n\t\tconst userProvidedFormatter = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"ticks\",\n\t\t\t\"formatter\"\n\t\t);\n\t\tif (isTimeScaleType) {\n\t\t\tconst timeInterval = computeTimeIntervalName(axis.tickValues());\n\t\t\tif (userProvidedFormatter === null) {\n\t\t\t\tformatter = (t: number, i: number) =>\n\t\t\t\t\tformatTick(t, i, timeInterval, timeScaleOptions);\n\t\t\t} else {\n\t\t\t\tformatter = (t: number, i: number) => {\n\t\t\t\t\tconst defaultFormattedValue = formatTick(\n\t\t\t\t\t\tt,\n\t\t\t\t\t\ti,\n\t\t\t\t\t\ttimeInterval,\n\t\t\t\t\t\ttimeScaleOptions\n\t\t\t\t\t);\n\t\t\t\t\treturn userProvidedFormatter(t, i, defaultFormattedValue);\n\t\t\t\t};\n\t\t\t}\n\t\t} else {\n\t\t\tif (userProvidedFormatter === null) {\n\t\t\t\tif (scaleType === ScaleTypes.LINEAR) {\n\t\t\t\t\tformatter = (t) => t.toLocaleString();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tformatter = userProvidedFormatter;\n\t\t\t}\n\t\t}\n\n\t\t// Set ticks formatter\n\t\taxis.tickFormat(formatter);\n\n\t\t// prioritize using a custom array of values rather than number of ticks\n\t\t// if both are provided. custom tick values need to be within the domain of the scale\n\t\tconst [\n\t\t\tlowerBound,\n\t\t\tupperBound\n\t\t] = this.services.cartesianScales\n\t\t\t.getScaleByPosition(axisPosition)\n\t\t\t.domain();\n\t\tlet validTicks;\n\t\tif (userProvidedTickValues) {\n\t\t\tif (isTimeScaleType) {\n\t\t\t\t// sanitize user-provided tick values\n\t\t\t\tuserProvidedTickValues.forEach((userProvidedTickValue, i) => {\n\t\t\t\t\tif (userProvidedTickValue.getTime === undefined) {\n\t\t\t\t\t\tuserProvidedTickValues[i] = new Date(\n\t\t\t\t\t\t\tuserProvidedTickValue\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// check the supplied ticks are within the time domain\n\t\t\t\tvalidTicks = userProvidedTickValues.filter((tick) => {\n\t\t\t\t\tconst tickTimestamp = tick.getTime();\n\t\t\t\t\treturn (\n\t\t\t\t\t\ttickTimestamp >= new Date(lowerBound).getTime() &&\n\t\t\t\t\t\ttickTimestamp <= new Date(upperBound).getTime()\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t} else if (axisScaleType === ScaleTypes.LABELS) {\n\t\t\t\tconst discreteDomain = this.services.cartesianScales\n\t\t\t\t\t.getScaleByPosition(axisPosition)\n\t\t\t\t\t.domain();\n\t\t\t\tvalidTicks = userProvidedTickValues.filter((tick) =>\n\t\t\t\t\tdiscreteDomain.includes(tick)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// continuous scales\n\t\t\t\tvalidTicks = userProvidedTickValues.filter(\n\t\t\t\t\t(tick) => tick >= lowerBound && tick <= upperBound\n\t\t\t\t);\n\t\t\t}\n\n\t\t\taxis.tickValues(validTicks);\n\t\t}\n\n\t\t// Position and transition the axis\n\t\tswitch (axisPosition) {\n\t\t\tcase AxisPositions.LEFT:\n\t\t\t\taxisRef.attr(\"transform\", `translate(${this.margins.left}, 0)`);\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\taxisRef.attr(\n\t\t\t\t\t\"transform\",\n\t\t\t\t\t`translate(0, ${height - this.margins.bottom})`\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\taxisRef.attr(\n\t\t\t\t\t\"transform\",\n\t\t\t\t\t`translate(${width - this.margins.right}, 0)`\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.TOP:\n\t\t\t\taxisRef.attr(\"transform\", `translate(0, ${this.margins.top})`);\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// Position the axis title\n\t\t// check that data exists, if they don't, doesn't show the title axis\n\t\tconst isDataEmpty = this.model.isDataEmpty();\n\t\tif (axisOptions.title) {\n\t\t\tconst axisTitleRef = DOMUtils.appendOrSelect(\n\t\t\t\tcontainer,\n\t\t\t\t`text.axis-title`\n\t\t\t).html(isDataEmpty || isDataLoading ? \"\" : axisOptions.title);\n\n\t\t\tswitch (axisPosition) {\n\t\t\t\tcase AxisPositions.LEFT:\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr(\"transform\", \"rotate(-90)\")\n\t\t\t\t\t\t.attr(\"y\", 0)\n\t\t\t\t\t\t.attr(\"x\", -(scale.range()[0] / 2))\n\t\t\t\t\t\t.attr(\"dy\", \"1em\")\n\t\t\t\t\t\t.style(\"text-anchor\", \"middle\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\"transform\",\n\t\t\t\t\t\t\t`translate(${\n\t\t\t\t\t\t\t\tthis.margins.left / 2 + scale.range()[1] / 2\n\t\t\t\t\t\t\t}, ${height})`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.style(\"text-anchor\", \"middle\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr(\"transform\", \"rotate(90)\")\n\t\t\t\t\t\t.attr(\"y\", -width)\n\t\t\t\t\t\t.attr(\"x\", scale.range()[0] / 2)\n\t\t\t\t\t\t.attr(\"dy\", \"1em\")\n\t\t\t\t\t\t.style(\"text-anchor\", \"middle\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.TOP:\n\t\t\t\t\tconst { height: titleHeight } = DOMUtils.getSVGElementSize(\n\t\t\t\t\t\taxisTitleRef,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tuseBBox: true\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\"transform\",\n\t\t\t\t\t\t\t`translate(${\n\t\t\t\t\t\t\t\tthis.margins.left / 2 + scale.range()[1] / 2\n\t\t\t\t\t\t\t}, ${titleHeight / 2})`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.style(\"text-anchor\", \"middle\");\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Apply new axis to the axis element\n\t\tif (isTimeScaleType) {\n\t\t\tconst timeInterval = computeTimeIntervalName(axis.tickValues());\n\t\t\tconst showDayName = timeScaleOptions.showDayName;\n\t\t\tconst axisRefSelection = axisRef;\n\n\t\t\tif (animate) {\n\t\t\t\taxisRef = axisRef.transition(\n\t\t\t\t\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t\"axis-update\",\n\t\t\t\t\t\tanimate\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t\taxisRef = axisRef.call(axis);\n\n\t\t\t// Manipulate tick labels to make bold those that are in long format\n\t\t\tconst ticks = axisRefSelection\n\t\t\t\t.selectAll(\".tick\")\n\t\t\t\t.data(axis.tickValues(), scale)\n\t\t\t\t.order()\n\t\t\t\t.select(\"text\");\n\t\t\tticks.style(\"font-weight\", (tickValue: number, i: number) => {\n\t\t\t\treturn isTickPrimary(tickValue, i, timeInterval, showDayName)\n\t\t\t\t\t? \"bold\"\n\t\t\t\t\t: \"normal\";\n\t\t\t});\n\t\t} else {\n\t\t\tif (!animate || !axisRefExists) {\n\t\t\t\taxisRef = axisRef.call(axis);\n\t\t\t} else {\n\t\t\t\taxisRef = axisRef\n\t\t\t\t\t.transition(\n\t\t\t\t\t\tthis.services.transitions.getTransition(\"axis-update\")\n\t\t\t\t\t)\n\t\t\t\t\t.call(axis);\n\t\t\t}\n\t\t}\n\n\t\tinvisibleAxisRef.call(axis);\n\n\t\tif (\n\t\t\taxisPosition === AxisPositions.BOTTOM ||\n\t\t\taxisPosition === AxisPositions.TOP\n\t\t) {\n\t\t\tlet shouldRotateTicks = false;\n\t\t\t// user could decide if tick rotation is required during zoom domain changing\n\t\t\tconst tickRotation = Tools.getProperty(\n\t\t\t\taxisOptions,\n\t\t\t\t\"ticks\",\n\t\t\t\t\"rotation\"\n\t\t\t);\n\n\t\t\tif (tickRotation === TickRotations.ALWAYS) {\n\t\t\t\tshouldRotateTicks = true;\n\t\t\t} else if (tickRotation === TickRotations.NEVER) {\n\t\t\t\tshouldRotateTicks = false;\n\t\t\t} else if (!tickRotation || tickRotation === TickRotations.AUTO) {\n\t\t\t\t// if the option is not set or set to AUTO\n\n\t\t\t\t// depending on if tick rotation is necessary by calculating space\n\t\t\t\t// If we're dealing with a discrete scale type\n\t\t\t\t// We're able to grab the spacing between the ticks\n\t\t\t\tif (scale.step) {\n\t\t\t\t\tconst textNodes = invisibleAxisRef\n\t\t\t\t\t\t.selectAll(\"g.tick text\")\n\t\t\t\t\t\t.nodes();\n\n\t\t\t\t\t// If any ticks are any larger than the scale step size\n\t\t\t\t\tshouldRotateTicks = textNodes.some(\n\t\t\t\t\t\t(textNode) =>\n\t\t\t\t\t\t\tDOMUtils.getSVGElementSize(textNode, {\n\t\t\t\t\t\t\t\tuseBBox: true\n\t\t\t\t\t\t\t}).width >= scale.step()\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t// When dealing with a continuous scale\n\t\t\t\t\t// We need to calculate an estimated size of the ticks\n\t\t\t\t\tconst minTickSize =\n\t\t\t\t\t\tTools.getProperty(\n\t\t\t\t\t\t\taxisOptions,\n\t\t\t\t\t\t\t\"ticks\",\n\t\t\t\t\t\t\t\"rotateIfSmallerThan\"\n\t\t\t\t\t\t) || Configuration.axis.ticks.rotateIfSmallerThan;\n\t\t\t\t\tconst ticksNumber = isTimeScaleType\n\t\t\t\t\t\t? axis.tickValues().length\n\t\t\t\t\t\t: scale.ticks().length;\n\t\t\t\t\tconst estimatedTickSize = width / ticksNumber / 2;\n\t\t\t\t\tshouldRotateTicks = isTimeScaleType\n\t\t\t\t\t\t? estimatedTickSize < minTickSize * 2 // datetime tick could be very long\n\t\t\t\t\t\t: estimatedTickSize < minTickSize;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (shouldRotateTicks) {\n\t\t\t\tif (!isNumberOfTicksProvided) {\n\t\t\t\t\taxis.ticks(\n\t\t\t\t\t\tthis.getNumberOfFittingTicks(\n\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\ttickHeight,\n\t\t\t\t\t\t\tConfiguration.axis.ticks.horizontalSpaceRatio\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\n\t\t\t\t\tinvisibleAxisRef.call(axis);\n\t\t\t\t\taxisRef.call(axis);\n\t\t\t\t}\n\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll(\"g.ticks g.tick text\")\n\t\t\t\t\t.attr(\"transform\", `rotate(-45)`)\n\t\t\t\t\t.style(\n\t\t\t\t\t\t\"text-anchor\",\n\t\t\t\t\t\taxisPosition === AxisPositions.TOP ? \"start\" : \"end\"\n\t\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll(\"g.ticks g.tick text\")\n\t\t\t\t\t.attr(\"transform\", null)\n\t\t\t\t\t.style(\"text-anchor\", null);\n\t\t\t}\n\t\t}\n\n\t\t// we don't need to show axes on empty state and on skeleton state\n\t\t// because the Skeleton component draws them\n\t\tif (isDataLoading) {\n\t\t\tcontainer.attr(\"opacity\", 0);\n\t\t} else {\n\t\t\tcontainer.attr(\"opacity\", 1);\n\t\t}\n\n\t\taxisRef.selectAll(\"g.tick\").attr(\"aria-label\", (d) => d);\n\n\t\tinvisibleAxisRef.selectAll(\"g.tick\").attr(\"aria-label\", (d) => d);\n\n\t\t// truncate the label if it's too long\n\t\t// only applies to discrete type\n\t\tif (\n\t\t\ttruncationType !== TruncationTypes.NONE &&\n\t\t\taxisScaleType === ScaleTypes.LABELS &&\n\t\t\t!userProvidedTickValues\n\t\t) {\n\t\t\tconst axisTickLabels = this.services.cartesianScales.getScaleDomain(\n\t\t\t\taxisPosition\n\t\t\t);\n\t\t\tif (axisTickLabels.length > 0) {\n\t\t\t\tconst tick_html = svg\n\t\t\t\t\t.select(`g.axis.${axisPosition} g.ticks g.tick`)\n\t\t\t\t\t.html();\n\n\t\t\t\tcontainer.selectAll(\"g.ticks g.tick\").html(tick_html);\n\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll(\"g.tick text\")\n\t\t\t\t\t.data(axisTickLabels)\n\t\t\t\t\t.text(function (d) {\n\t\t\t\t\t\tif (d.length > truncationThreshold) {\n\t\t\t\t\t\t\treturn Tools.truncateLabel(\n\t\t\t\t\t\t\t\td,\n\t\t\t\t\t\t\t\ttruncationType,\n\t\t\t\t\t\t\t\ttruncationNumCharacter\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn d;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tthis.getInvisibleAxisRef()\n\t\t\t\t\t.selectAll(\"g.tick text\")\n\t\t\t\t\t.data(axisTickLabels)\n\t\t\t\t\t.text(function (d) {\n\t\t\t\t\t\tif (d.length > truncationThreshold) {\n\t\t\t\t\t\t\treturn Tools.truncateLabel(\n\t\t\t\t\t\t\t\td,\n\t\t\t\t\t\t\t\ttruncationType,\n\t\t\t\t\t\t\t\ttruncationNumCharacter\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn d;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll(\"g.ticks\")\n\t\t\t\t\t.html(this.getInvisibleAxisRef().html());\n\n\t\t\t\tcontainer.selectAll(\"g.tick text\").data(axisTickLabels);\n\t\t\t}\n\t\t}\n\t\t// Add event listeners to elements drawn\n\t\tthis.addEventListeners();\n\t}\n\n\taddEventListeners() {\n\t\tconst svg = this.getContainerSVG();\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\t\tconst options = this.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, \"axes\", axisPosition);\n\t\tconst axisScaleType = Tools.getProperty(axisOptions, \"scaleType\");\n\t\tconst truncationThreshold = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t\"truncation\",\n\t\t\t\"threshold\"\n\t\t);\n\n\t\tconst isTimeScaleType =\n\t\t\tthis.scaleType === ScaleTypes.TIME ||\n\t\t\taxisOptions.scaleType === ScaleTypes.TIME;\n\n\t\tconst self = this;\n\t\tcontainer\n\t\t\t.selectAll(\"g.tick text\")\n\t\t\t.on(\"mouseover\", function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Axis.LABEL_MOUSEOVER,\n\t\t\t\t\t{\n\t\t\t\t\t\telement: select(this),\n\t\t\t\t\t\tdatum\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tif (\n\t\t\t\t\taxisScaleType === ScaleTypes.LABELS &&\n\t\t\t\t\tdatum.length > truncationThreshold\n\t\t\t\t) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\t\thoveredElement: select(this),\n\t\t\t\t\t\tcontent: datum\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on(\"mousemove\", function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Axis.LABEL_MOUSEMOVE,\n\t\t\t\t\t{\n\t\t\t\t\t\telement: select(this),\n\t\t\t\t\t\tdatum\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tif (\n\t\t\t\t\taxisScaleType === ScaleTypes.LABELS &&\n\t\t\t\t\tdatum.length > truncationThreshold\n\t\t\t\t) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.MOVE);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on(\"click\", function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Axis.LABEL_CLICK, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"mouseout\", function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Axis.LABEL_MOUSEOUT, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum\n\t\t\t\t});\n\t\t\t\tif (axisScaleType === ScaleTypes.LABELS) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE);\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tgetInvisibleAxisRef() {\n\t\tconst { position: axisPosition } = this.configs;\n\n\t\treturn this.getContainerSVG().select(\n\t\t\t`g.axis.${axisPosition} g.ticks.invisible`\n\t\t);\n\t}\n\n\tgetTitleRef() {\n\t\tconst { position: axisPosition } = this.configs;\n\n\t\treturn this.getContainerSVG().select(\n\t\t\t`g.axis.${axisPosition} text.axis-title`\n\t\t);\n\t}\n\n\tgetNumberOfFittingTicks(size, tickSize, spaceRatio) {\n\t\tconst numberOfTicksFit = Math.floor(size / (tickSize * spaceRatio));\n\t\treturn Tools.clamp(\n\t\t\tnumberOfTicksFit,\n\t\t\t2,\n\t\t\tConfiguration.axis.ticks.number\n\t\t);\n\t}\n\n\tdestroy() {\n\t\tconst svg = this.getContainerSVG();\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\n\t\t// Remove event listeners\n\t\tcontainer\n\t\t\t.selectAll(\"g.tick text\")\n\t\t\t.on(\"mouseover\", null)\n\t\t\t.on(\"mousemove\", null)\n\t\t\t.on(\"mouseout\", null);\n\t}\n}\n"]}
1
+ {"version":3,"file":"axis.js","sourceRoot":"","sources":["axis.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from '../component';\nimport {\n\tAxisPositions,\n\tEvents,\n\tScaleTypes,\n\tRoles,\n\tTruncationTypes,\n} from '../../interfaces';\nimport { Tools } from '../../tools';\nimport { ChartModel } from '../../model';\nimport { DOMUtils } from '../../services';\nimport { TickRotations } from '../../interfaces/enums';\nimport * as Configuration from '../../configuration';\nimport {\n\tcomputeTimeIntervalName,\n\tformatTick,\n\tisTickPrimary,\n} from '../../services/time-series';\n\n// D3 Imports\nimport { select } from 'd3-selection';\nimport { axisBottom, axisLeft, axisRight, axisTop } from 'd3-axis';\n\nexport class Axis extends Component {\n\ttype = 'axes';\n\n\tmargins: any;\n\n\tscale: any;\n\tscaleType: ScaleTypes;\n\n\tconstructor(model: ChartModel, services: any, configs?: any) {\n\t\tsuper(model, services, configs);\n\n\t\tif (configs) {\n\t\t\tthis.configs = configs;\n\t\t}\n\n\t\tthis.margins = this.configs.margins;\n\t}\n\n\trender(animate = true) {\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst options = this.getOptions();\n\t\tconst isAxisVisible = Tools.getProperty(\n\t\t\toptions,\n\t\t\t'axes',\n\t\t\taxisPosition,\n\t\t\t'visible'\n\t\t);\n\n\t\tconst svg = this.getContainerSVG();\n\t\tconst { width, height } = DOMUtils.getSVGElementSize(this.parent, {\n\t\t\tuseAttrs: true,\n\t\t});\n\t\t// Add axis into the parent\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\t\tlet startPosition, endPosition;\n\t\tif (\n\t\t\taxisPosition === AxisPositions.BOTTOM ||\n\t\t\taxisPosition === AxisPositions.TOP\n\t\t) {\n\t\t\tstartPosition = this.configs.axes[AxisPositions.LEFT]\n\t\t\t\t? this.margins.left\n\t\t\t\t: 0;\n\t\t\tendPosition = this.configs.axes[AxisPositions.RIGHT]\n\t\t\t\t? width - this.margins.right\n\t\t\t\t: width;\n\t\t} else {\n\t\t\tstartPosition = height - this.margins.bottom;\n\t\t\tendPosition = this.margins.top;\n\t\t}\n\n\t\t// Grab the scale off of the Scales service\n\t\tconst scale = this.services.cartesianScales.getScaleByPosition(\n\t\t\taxisPosition\n\t\t);\n\n\t\tif (this.scaleType === ScaleTypes.LABELS) {\n\t\t\tscale.rangeRound([startPosition, endPosition]);\n\t\t} else {\n\t\t\tscale.range([startPosition, endPosition]);\n\t\t}\n\n\t\t// Identify the corresponding d3 axis function\n\t\tlet axisFunction;\n\t\tswitch (axisPosition) {\n\t\t\tcase AxisPositions.LEFT:\n\t\t\t\taxisFunction = axisLeft;\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\taxisFunction = axisBottom;\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\taxisFunction = axisRight;\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.TOP:\n\t\t\t\taxisFunction = axisTop;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tcontainer.attr('aria-label', `${axisPosition} axis`);\n\t\tconst axisRefExists = !container.select(`g.ticks`).empty();\n\t\tlet axisRef = DOMUtils.appendOrSelect(container, `g.ticks`);\n\t\tif (!axisRefExists) {\n\t\t\taxisRef.attr('role', `${Roles.GRAPHICS_OBJECT} ${Roles.GROUP}`);\n\t\t\taxisRef.attr('aria-label', `${axisPosition} ticks`);\n\t\t}\n\n\t\t// We draw the invisible axis because of the async nature of d3 transitions\n\t\t// To be able to tell the final width & height of the axis when initiaing the transition\n\t\t// The invisible axis is updated instantly and without a transition\n\t\tconst invisibleAxisRef = DOMUtils.appendOrSelect(\n\t\t\tcontainer,\n\t\t\t`g.ticks.invisible`\n\t\t)\n\t\t\t.style('opacity', '0')\n\t\t\t.style('pointer-events', 'none')\n\t\t\t.attr('aria-hidden', true)\n\t\t\t.attr('aria-label', `invisible ${axisPosition} ticks`);\n\n\t\tconst axisOptions = Tools.getProperty(options, 'axes', axisPosition);\n\t\tconst isTimeScaleType =\n\t\t\tthis.scaleType === ScaleTypes.TIME ||\n\t\t\taxisOptions.scaleType === ScaleTypes.TIME;\n\t\tconst isVerticalAxis =\n\t\t\taxisPosition === AxisPositions.LEFT ||\n\t\t\taxisPosition === AxisPositions.RIGHT;\n\n\t\t// if zoomDomain is available, scale type is time, and axis position isBOTTOM or TOP\n\t\t// update scale domain to zoomDomain.\n\t\tconst zoomDomain = this.model.get('zoomDomain');\n\t\tif (zoomDomain && isTimeScaleType && !isVerticalAxis) {\n\t\t\tscale.domain(zoomDomain);\n\t\t}\n\n\t\tif (!isAxisVisible) {\n\t\t\taxisRef.attr('aria-hidden', true);\n\t\t\treturn;\n\t\t}\n\n\t\tconst axisScaleType = Tools.getProperty(axisOptions, 'scaleType');\n\t\tconst isDataLoading = Tools.getProperty(options, 'data', 'loading');\n\t\tconst numberOfTicksProvided = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t'ticks',\n\t\t\t'number'\n\t\t);\n\n\t\t// user can provide custom ticks to be displayed\n\t\t// ticks need to be in the domain of the axis data\n\t\tconst userProvidedTickValues = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t'ticks',\n\t\t\t'values'\n\t\t);\n\n\t\t// get user provided custom values for truncation\n\t\tconst truncationType = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t'truncation',\n\t\t\t'type'\n\t\t);\n\t\tconst truncationThreshold = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t'truncation',\n\t\t\t'threshold'\n\t\t);\n\t\tconst truncationNumCharacter = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t'truncation',\n\t\t\t'numCharacter'\n\t\t);\n\n\t\tconst isNumberOfTicksProvided = numberOfTicksProvided !== null;\n\t\tconst timeScaleOptions = Tools.getProperty(options, 'timeScale');\n\n\t\t// Append to DOM a fake tick to get the right computed font height\n\t\tconst fakeTick = DOMUtils.appendOrSelect(invisibleAxisRef, `g.tick`);\n\t\tconst fakeTickText = DOMUtils.appendOrSelect(fakeTick, `text`).text(\n\t\t\t'0'\n\t\t);\n\t\tconst tickHeight = DOMUtils.getSVGElementSize(fakeTickText.node(), {\n\t\t\tuseBBox: true,\n\t\t}).height;\n\t\tfakeTick.remove();\n\n\t\tconst scaleType =\n\t\t\tthis.scaleType || axisOptions.scaleType || ScaleTypes.LINEAR;\n\n\t\t// Initialize axis object\n\t\tconst axis = axisFunction(scale).tickSizeOuter(0);\n\n\t\tif (scale.ticks) {\n\t\t\tlet numberOfTicks;\n\n\t\t\tif (isNumberOfTicksProvided) {\n\t\t\t\tnumberOfTicks = numberOfTicksProvided;\n\t\t\t} else {\n\t\t\t\tnumberOfTicks = Configuration.axis.ticks.number;\n\t\t\t\tif (isVerticalAxis) {\n\t\t\t\t\t// Set how many ticks based on height\n\t\t\t\t\tnumberOfTicks = this.getNumberOfFittingTicks(\n\t\t\t\t\t\theight,\n\t\t\t\t\t\ttickHeight,\n\t\t\t\t\t\tConfiguration.axis.ticks.verticalSpaceRatio\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// scale continuous\n\t\t\t// remove 0 ticks for skeleton\n\t\t\tif (scale.ticks().length === 1 && scale.ticks()[0] === 0) {\n\t\t\t\tnumberOfTicks = 0;\n\t\t\t}\n\n\t\t\taxis.ticks(numberOfTicks);\n\n\t\t\tif (isTimeScaleType) {\n\t\t\t\tif (!scale.ticks(numberOfTicks).length) {\n\t\t\t\t\taxis.tickValues([]);\n\t\t\t\t} else {\n\t\t\t\t\tconst addSpaceOnEdges = Tools.getProperty(\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\t'timeScale',\n\t\t\t\t\t\t'addSpaceOnEdges'\n\t\t\t\t\t);\n\n\t\t\t\t\tconst customDomain = Tools.getProperty(\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\t'axes',\n\t\t\t\t\t\taxisPosition,\n\t\t\t\t\t\t'domain'\n\t\t\t\t\t);\n\n\t\t\t\t\tlet tickValues;\n\t\t\t\t\t// scale.nice() will change scale domain which causes extra space near chart edge\n\t\t\t\t\t// so use another scale instance to avoid impacts to original scale\n\t\t\t\t\tconst tempScale = scale.copy();\n\t\t\t\t\tif (addSpaceOnEdges && !customDomain) {\n\t\t\t\t\t\ttempScale.nice(numberOfTicks);\n\t\t\t\t\t}\n\t\t\t\t\ttickValues = tempScale.ticks(numberOfTicks);\n\n\t\t\t\t\t// Remove labels on the edges\n\t\t\t\t\t// If there are more than 2 labels to show\n\t\t\t\t\tif (\n\t\t\t\t\t\taddSpaceOnEdges &&\n\t\t\t\t\t\ttickValues.length > 2 &&\n\t\t\t\t\t\t!customDomain\n\t\t\t\t\t) {\n\t\t\t\t\t\ttickValues.splice(tickValues.length - 1, 1);\n\t\t\t\t\t\ttickValues.splice(0, 1);\n\t\t\t\t\t}\n\n\t\t\t\t\taxis.tickValues(tickValues);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// create the right ticks formatter\n\t\tlet formatter;\n\t\tconst userProvidedFormatter = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t'ticks',\n\t\t\t'formatter'\n\t\t);\n\t\tif (isTimeScaleType) {\n\t\t\tconst timeInterval = computeTimeIntervalName(axis.tickValues());\n\t\t\tif (userProvidedFormatter === null) {\n\t\t\t\tformatter = (t: number, i: number) =>\n\t\t\t\t\tformatTick(t, i, timeInterval, timeScaleOptions);\n\t\t\t} else {\n\t\t\t\tformatter = (t: number, i: number) => {\n\t\t\t\t\tconst defaultFormattedValue = formatTick(\n\t\t\t\t\t\tt,\n\t\t\t\t\t\ti,\n\t\t\t\t\t\ttimeInterval,\n\t\t\t\t\t\ttimeScaleOptions\n\t\t\t\t\t);\n\t\t\t\t\treturn userProvidedFormatter(t, i, defaultFormattedValue);\n\t\t\t\t};\n\t\t\t}\n\t\t} else {\n\t\t\tif (userProvidedFormatter === null) {\n\t\t\t\tif (scaleType === ScaleTypes.LINEAR) {\n\t\t\t\t\tformatter = (t) => t.toLocaleString();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tformatter = userProvidedFormatter;\n\t\t\t}\n\t\t}\n\n\t\t// Set ticks formatter\n\t\taxis.tickFormat(formatter);\n\n\t\t// prioritize using a custom array of values rather than number of ticks\n\t\t// if both are provided. custom tick values need to be within the domain of the scale\n\t\tconst [\n\t\t\tlowerBound,\n\t\t\tupperBound,\n\t\t] = this.services.cartesianScales\n\t\t\t.getScaleByPosition(axisPosition)\n\t\t\t.domain();\n\t\tlet validTicks;\n\t\tif (userProvidedTickValues) {\n\t\t\tif (isTimeScaleType) {\n\t\t\t\t// sanitize user-provided tick values\n\t\t\t\tuserProvidedTickValues.forEach((userProvidedTickValue, i) => {\n\t\t\t\t\tif (userProvidedTickValue.getTime === undefined) {\n\t\t\t\t\t\tuserProvidedTickValues[i] = new Date(\n\t\t\t\t\t\t\tuserProvidedTickValue\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// check the supplied ticks are within the time domain\n\t\t\t\tvalidTicks = userProvidedTickValues.filter((tick) => {\n\t\t\t\t\tconst tickTimestamp = tick.getTime();\n\t\t\t\t\treturn (\n\t\t\t\t\t\ttickTimestamp >= new Date(lowerBound).getTime() &&\n\t\t\t\t\t\ttickTimestamp <= new Date(upperBound).getTime()\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t} else if (axisScaleType === ScaleTypes.LABELS) {\n\t\t\t\tconst discreteDomain = this.services.cartesianScales\n\t\t\t\t\t.getScaleByPosition(axisPosition)\n\t\t\t\t\t.domain();\n\t\t\t\tvalidTicks = userProvidedTickValues.filter((tick) =>\n\t\t\t\t\tdiscreteDomain.includes(tick)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// continuous scales\n\t\t\t\tvalidTicks = userProvidedTickValues.filter(\n\t\t\t\t\t(tick) => tick >= lowerBound && tick <= upperBound\n\t\t\t\t);\n\t\t\t}\n\n\t\t\taxis.tickValues(validTicks);\n\t\t}\n\n\t\t// Position and transition the axis\n\t\tswitch (axisPosition) {\n\t\t\tcase AxisPositions.LEFT:\n\t\t\t\taxisRef.attr('transform', `translate(${this.margins.left}, 0)`);\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\taxisRef.attr(\n\t\t\t\t\t'transform',\n\t\t\t\t\t`translate(0, ${height - this.margins.bottom})`\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\taxisRef.attr(\n\t\t\t\t\t'transform',\n\t\t\t\t\t`translate(${width - this.margins.right}, 0)`\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase AxisPositions.TOP:\n\t\t\t\taxisRef.attr('transform', `translate(0, ${this.margins.top})`);\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// Position the axis title\n\t\t// check that data exists, if they don't, doesn't show the title axis\n\t\tconst isDataEmpty = this.model.isDataEmpty();\n\t\tif (axisOptions.title) {\n\t\t\tconst axisTitleRef = DOMUtils.appendOrSelect(\n\t\t\t\tcontainer,\n\t\t\t\t`text.axis-title`\n\t\t\t).html(isDataEmpty || isDataLoading ? '' : axisOptions.title);\n\n\t\t\tswitch (axisPosition) {\n\t\t\t\tcase AxisPositions.LEFT:\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr('transform', 'rotate(-90)')\n\t\t\t\t\t\t.attr('y', 0)\n\t\t\t\t\t\t.attr('x', -(scale.range()[0] / 2))\n\t\t\t\t\t\t.attr('dy', '1em')\n\t\t\t\t\t\t.style('text-anchor', 'middle');\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t'transform',\n\t\t\t\t\t\t\t`translate(${\n\t\t\t\t\t\t\t\tthis.margins.left / 2 + scale.range()[1] / 2\n\t\t\t\t\t\t\t}, ${height})`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.style('text-anchor', 'middle');\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr('transform', 'rotate(90)')\n\t\t\t\t\t\t.attr('y', -width)\n\t\t\t\t\t\t.attr('x', scale.range()[0] / 2)\n\t\t\t\t\t\t.attr('dy', '1em')\n\t\t\t\t\t\t.style('text-anchor', 'middle');\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.TOP:\n\t\t\t\t\tconst { height: titleHeight } = DOMUtils.getSVGElementSize(\n\t\t\t\t\t\taxisTitleRef,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tuseBBox: true,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\taxisTitleRef\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t'transform',\n\t\t\t\t\t\t\t`translate(${\n\t\t\t\t\t\t\t\tthis.margins.left / 2 + scale.range()[1] / 2\n\t\t\t\t\t\t\t}, ${titleHeight / 2})`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.style('text-anchor', 'middle');\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Apply new axis to the axis element\n\t\tif (isTimeScaleType) {\n\t\t\tconst timeInterval = computeTimeIntervalName(axis.tickValues());\n\t\t\tconst showDayName = timeScaleOptions.showDayName;\n\t\t\tconst axisRefSelection = axisRef;\n\n\t\t\tif (animate) {\n\t\t\t\taxisRef = axisRef.transition(\n\t\t\t\t\tthis.services.transitions.getTransition(\n\t\t\t\t\t\t'axis-update',\n\t\t\t\t\t\tanimate\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t\taxisRef = axisRef.call(axis);\n\n\t\t\t// Manipulate tick labels to make bold those that are in long format\n\t\t\tconst ticks = axisRefSelection\n\t\t\t\t.selectAll('.tick')\n\t\t\t\t.data(axis.tickValues(), scale)\n\t\t\t\t.order()\n\t\t\t\t.select('text');\n\t\t\tticks.style('font-weight', (tickValue: number, i: number) => {\n\t\t\t\treturn isTickPrimary(tickValue, i, timeInterval, showDayName)\n\t\t\t\t\t? 'bold'\n\t\t\t\t\t: 'normal';\n\t\t\t});\n\t\t} else {\n\t\t\tif (!animate || !axisRefExists) {\n\t\t\t\taxisRef = axisRef.call(axis);\n\t\t\t} else {\n\t\t\t\taxisRef = axisRef\n\t\t\t\t\t.transition(\n\t\t\t\t\t\tthis.services.transitions.getTransition('axis-update')\n\t\t\t\t\t)\n\t\t\t\t\t.call(axis);\n\t\t\t}\n\t\t}\n\n\t\tinvisibleAxisRef.call(axis);\n\n\t\tif (\n\t\t\taxisPosition === AxisPositions.BOTTOM ||\n\t\t\taxisPosition === AxisPositions.TOP\n\t\t) {\n\t\t\tlet shouldRotateTicks = false;\n\t\t\t// user could decide if tick rotation is required during zoom domain changing\n\t\t\tconst tickRotation = Tools.getProperty(\n\t\t\t\taxisOptions,\n\t\t\t\t'ticks',\n\t\t\t\t'rotation'\n\t\t\t);\n\n\t\t\tif (tickRotation === TickRotations.ALWAYS) {\n\t\t\t\tshouldRotateTicks = true;\n\t\t\t} else if (tickRotation === TickRotations.NEVER) {\n\t\t\t\tshouldRotateTicks = false;\n\t\t\t} else if (!tickRotation || tickRotation === TickRotations.AUTO) {\n\t\t\t\t// if the option is not set or set to AUTO\n\n\t\t\t\t// depending on if tick rotation is necessary by calculating space\n\t\t\t\t// If we're dealing with a discrete scale type\n\t\t\t\t// We're able to grab the spacing between the ticks\n\t\t\t\tif (scale.step) {\n\t\t\t\t\tconst textNodes = invisibleAxisRef\n\t\t\t\t\t\t.selectAll('g.tick text')\n\t\t\t\t\t\t.nodes();\n\n\t\t\t\t\t// If any ticks are any larger than the scale step size\n\t\t\t\t\tshouldRotateTicks = textNodes.some(\n\t\t\t\t\t\t(textNode) =>\n\t\t\t\t\t\t\tDOMUtils.getSVGElementSize(textNode, {\n\t\t\t\t\t\t\t\tuseBBox: true,\n\t\t\t\t\t\t\t}).width >= scale.step()\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t// When dealing with a continuous scale\n\t\t\t\t\t// We need to calculate an estimated size of the ticks\n\t\t\t\t\tconst minTickSize =\n\t\t\t\t\t\tTools.getProperty(\n\t\t\t\t\t\t\taxisOptions,\n\t\t\t\t\t\t\t'ticks',\n\t\t\t\t\t\t\t'rotateIfSmallerThan'\n\t\t\t\t\t\t) || Configuration.axis.ticks.rotateIfSmallerThan;\n\t\t\t\t\tconst ticksNumber = isTimeScaleType\n\t\t\t\t\t\t? axis.tickValues().length\n\t\t\t\t\t\t: scale.ticks().length;\n\t\t\t\t\tconst estimatedTickSize = width / ticksNumber / 2;\n\t\t\t\t\tshouldRotateTicks = isTimeScaleType\n\t\t\t\t\t\t? estimatedTickSize < minTickSize * 2 // datetime tick could be very long\n\t\t\t\t\t\t: estimatedTickSize < minTickSize;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (shouldRotateTicks) {\n\t\t\t\tif (!isNumberOfTicksProvided) {\n\t\t\t\t\taxis.ticks(\n\t\t\t\t\t\tthis.getNumberOfFittingTicks(\n\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\ttickHeight,\n\t\t\t\t\t\t\tConfiguration.axis.ticks.horizontalSpaceRatio\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\n\t\t\t\t\tinvisibleAxisRef.call(axis);\n\t\t\t\t\taxisRef.call(axis);\n\t\t\t\t}\n\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll('g.ticks g.tick text')\n\t\t\t\t\t.attr('transform', `rotate(-45)`)\n\t\t\t\t\t.style(\n\t\t\t\t\t\t'text-anchor',\n\t\t\t\t\t\taxisPosition === AxisPositions.TOP ? 'start' : 'end'\n\t\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll('g.ticks g.tick text')\n\t\t\t\t\t.attr('transform', null)\n\t\t\t\t\t.style('text-anchor', null);\n\t\t\t}\n\t\t}\n\n\t\t// we don't need to show axes on empty state and on skeleton state\n\t\t// because the Skeleton component draws them\n\t\tif (isDataLoading) {\n\t\t\tcontainer.attr('opacity', 0);\n\t\t} else {\n\t\t\tcontainer.attr('opacity', 1);\n\t\t}\n\n\t\taxisRef.selectAll('g.tick').attr('aria-label', (d) => d);\n\n\t\tinvisibleAxisRef.selectAll('g.tick').attr('aria-label', (d) => d);\n\n\t\t// truncate the label if it's too long\n\t\t// only applies to discrete type\n\t\tif (\n\t\t\ttruncationType !== TruncationTypes.NONE &&\n\t\t\taxisScaleType === ScaleTypes.LABELS &&\n\t\t\t!userProvidedTickValues\n\t\t) {\n\t\t\tconst axisTickLabels = this.services.cartesianScales.getScaleDomain(\n\t\t\t\taxisPosition\n\t\t\t);\n\t\t\tif (axisTickLabels.length > 0) {\n\t\t\t\tconst tick_html = svg\n\t\t\t\t\t.select(`g.axis.${axisPosition} g.ticks g.tick`)\n\t\t\t\t\t.html();\n\n\t\t\t\tcontainer.selectAll('g.ticks g.tick').html(tick_html);\n\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll('g.tick text')\n\t\t\t\t\t.data(axisTickLabels)\n\t\t\t\t\t.text(function (d) {\n\t\t\t\t\t\tif (d.length > truncationThreshold) {\n\t\t\t\t\t\t\treturn Tools.truncateLabel(\n\t\t\t\t\t\t\t\td,\n\t\t\t\t\t\t\t\ttruncationType,\n\t\t\t\t\t\t\t\ttruncationNumCharacter\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn d;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tthis.getInvisibleAxisRef()\n\t\t\t\t\t.selectAll('g.tick text')\n\t\t\t\t\t.data(axisTickLabels)\n\t\t\t\t\t.text(function (d) {\n\t\t\t\t\t\tif (d.length > truncationThreshold) {\n\t\t\t\t\t\t\treturn Tools.truncateLabel(\n\t\t\t\t\t\t\t\td,\n\t\t\t\t\t\t\t\ttruncationType,\n\t\t\t\t\t\t\t\ttruncationNumCharacter\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn d;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tcontainer\n\t\t\t\t\t.selectAll('g.ticks')\n\t\t\t\t\t.html(this.getInvisibleAxisRef().html());\n\n\t\t\t\tcontainer.selectAll('g.tick text').data(axisTickLabels);\n\t\t\t}\n\t\t}\n\t\t// Add event listeners to elements drawn\n\t\tthis.addEventListeners();\n\t}\n\n\taddEventListeners() {\n\t\tconst svg = this.getContainerSVG();\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\t\tconst options = this.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, 'axes', axisPosition);\n\t\tconst axisScaleType = Tools.getProperty(axisOptions, 'scaleType');\n\t\tconst truncationThreshold = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t'truncation',\n\t\t\t'threshold'\n\t\t);\n\n\t\tconst isTimeScaleType =\n\t\t\tthis.scaleType === ScaleTypes.TIME ||\n\t\t\taxisOptions.scaleType === ScaleTypes.TIME;\n\n\t\tconst self = this;\n\t\tcontainer\n\t\t\t.selectAll('g.tick text')\n\t\t\t.on('mouseover', function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Axis.LABEL_MOUSEOVER,\n\t\t\t\t\t{\n\t\t\t\t\t\telement: select(this),\n\t\t\t\t\t\tdatum,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tif (\n\t\t\t\t\taxisScaleType === ScaleTypes.LABELS &&\n\t\t\t\t\tdatum.length > truncationThreshold\n\t\t\t\t) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\t\thoveredElement: select(this),\n\t\t\t\t\t\tcontent: datum,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('mousemove', function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Axis.LABEL_MOUSEMOVE,\n\t\t\t\t\t{\n\t\t\t\t\t\telement: select(this),\n\t\t\t\t\t\tdatum,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tif (\n\t\t\t\t\taxisScaleType === ScaleTypes.LABELS &&\n\t\t\t\t\tdatum.length > truncationThreshold\n\t\t\t\t) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.MOVE);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('click', function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Axis.LABEL_CLICK, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mouseout', function (datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Axis.LABEL_MOUSEOUT, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum,\n\t\t\t\t});\n\t\t\t\tif (axisScaleType === ScaleTypes.LABELS) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE);\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tgetInvisibleAxisRef() {\n\t\tconst { position: axisPosition } = this.configs;\n\n\t\treturn this.getContainerSVG().select(\n\t\t\t`g.axis.${axisPosition} g.ticks.invisible`\n\t\t);\n\t}\n\n\tgetTitleRef() {\n\t\tconst { position: axisPosition } = this.configs;\n\n\t\treturn this.getContainerSVG().select(\n\t\t\t`g.axis.${axisPosition} text.axis-title`\n\t\t);\n\t}\n\n\tgetNumberOfFittingTicks(size, tickSize, spaceRatio) {\n\t\tconst numberOfTicksFit = Math.floor(size / (tickSize * spaceRatio));\n\t\treturn Tools.clamp(\n\t\t\tnumberOfTicksFit,\n\t\t\t2,\n\t\t\tConfiguration.axis.ticks.number\n\t\t);\n\t}\n\n\tdestroy() {\n\t\tconst svg = this.getContainerSVG();\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\n\t\t// Remove event listeners\n\t\tcontainer\n\t\t\t.selectAll('g.tick text')\n\t\t\t.on('mouseover', null)\n\t\t\t.on('mousemove', null)\n\t\t\t.on('mouseout', null);\n\t}\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { Component } from "../component";
2
- import { ChartModel } from "../../model";
1
+ import { Component } from '../component';
2
+ import { ChartModel } from '../../model';
3
3
  export declare class ChartClip extends Component {
4
4
  type: string;
5
5
  chartClipId: string;
@@ -12,18 +12,18 @@ var __extends = (this && this.__extends) || (function () {
12
12
  };
13
13
  })();
14
14
  // Internal Imports
15
- import { Component } from "../component";
16
- import { DOMUtils } from "../../services";
15
+ import { Component } from '../component';
16
+ import { DOMUtils } from '../../services';
17
17
  // This class is used to create the clipPath to clip the chart components
18
18
  // It's necessary for zoom in/out behavior
19
19
  var ChartClip = /** @class */ (function (_super) {
20
20
  __extends(ChartClip, _super);
21
21
  function ChartClip(model, services, configs) {
22
22
  var _this = _super.call(this, model, services, configs) || this;
23
- _this.type = "chart-clip";
23
+ _this.type = 'chart-clip';
24
24
  // Give every chart-clip a distinct ID
25
25
  // so they don't interfere each other in a page with multiple charts
26
- _this.chartClipId = "chart-clip-id-" + Math.floor(Math.random() * 99999999999);
26
+ _this.chartClipId = 'chart-clip-id-' + Math.floor(Math.random() * 99999999999);
27
27
  _this.init();
28
28
  return _this;
29
29
  }
@@ -44,13 +44,13 @@ var ChartClip = /** @class */ (function (_super) {
44
44
  var _a = mainXScale.range(), xScaleStart = _a[0], xScaleEnd = _a[1];
45
45
  var _b = mainYScale.range(), yScaleEnd = _b[0], yScaleStart = _b[1];
46
46
  // Get height
47
- this.chartClipPath = DOMUtils.appendOrSelect(svg, "clipPath." + this.type).attr("id", this.chartClipId);
47
+ this.chartClipPath = DOMUtils.appendOrSelect(svg, "clipPath." + this.type).attr('id', this.chartClipId);
48
48
  var clipRect = DOMUtils.appendOrSelect(this.chartClipPath, "rect." + this.type);
49
49
  clipRect
50
- .attr("x", xScaleStart)
51
- .attr("y", yScaleStart)
52
- .attr("width", xScaleEnd - xScaleStart)
53
- .attr("height", yScaleEnd - yScaleStart);
50
+ .attr('x', xScaleStart)
51
+ .attr('y', yScaleStart)
52
+ .attr('width', xScaleEnd - xScaleStart)
53
+ .attr('height', yScaleEnd - yScaleStart);
54
54
  this.chartClipPath.merge(clipRect).lower();
55
55
  };
56
56
  return ChartClip;
@@ -1 +1 @@
1
- {"version":3,"file":"chart-clip.js","sourceRoot":"","sources":["chart-clip.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,yEAAyE;AACzE,0CAA0C;AAC1C;IAA+B,6BAAS;IASvC,mBAAY,KAAiB,EAAE,QAAa,EAAE,OAAa;QAA3D,YACC,kBAAM,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,SAE/B;QAXD,UAAI,GAAG,YAAY,CAAC;QAEpB,sCAAsC;QACtC,oEAAoE;QACpE,iBAAW,GAAG,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC;QAMxE,KAAI,CAAC,IAAI,EAAE,CAAC;;IACb,CAAC;IAED,wBAAI,GAAJ;QACC,gDAAgD;QAChD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,0BAAM,GAAN,UAAO,OAAc;QAAd,wBAAA,EAAA,cAAc;QACpB,sBAAsB;QACtB,IAAI,CAAC,cAAc,EAAE,CAAC;IACvB,CAAC;IAED,kCAAc,GAAd;QACC,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QAChB,IAAA,+CAAe,CAAmB;QAC1C,IAAM,UAAU,GAAG,eAAe,CAAC,aAAa,EAAE,CAAC;QACnD,IAAM,UAAU,GAAG,eAAe,CAAC,aAAa,EAAE,CAAC;QAE7C,IAAA,uBAA6C,EAA5C,mBAAW,EAAE,iBAA+B,CAAC;QAC9C,IAAA,uBAA6C,EAA5C,iBAAS,EAAE,mBAAiC,CAAC;QAEpD,aAAa;QACb,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,cAAc,CAC3C,GAAG,EACH,cAAY,IAAI,CAAC,IAAM,CACvB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/B,IAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CACvC,IAAI,CAAC,aAAa,EAClB,UAAQ,IAAI,CAAC,IAAM,CACnB,CAAC;QACF,QAAQ;aACN,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC;aACtB,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC;aACtB,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,WAAW,CAAC;aACtC,IAAI,CAAC,QAAQ,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC;QAE1C,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;IAC5C,CAAC;IACF,gBAAC;AAAD,CAAC,AAlDD,CAA+B,SAAS,GAkDvC","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { DOMUtils } from \"../../services\";\nimport { ChartModel } from \"../../model\";\n\n// This class is used to create the clipPath to clip the chart components\n// It's necessary for zoom in/out behavior\nexport class ChartClip extends Component {\n\ttype = \"chart-clip\";\n\n\t// Give every chart-clip a distinct ID\n\t// so they don't interfere each other in a page with multiple charts\n\tchartClipId = \"chart-clip-id-\" + Math.floor(Math.random() * 99999999999);\n\n\tchartClipPath: any;\n\n\tconstructor(model: ChartModel, services: any, configs?: any) {\n\t\tsuper(model, services, configs);\n\t\tthis.init();\n\t}\n\n\tinit() {\n\t\t// set unique chartClipId in this chart to model\n\t\tthis.model.set({ chartClipId: this.chartClipId }, { skipUpdate: true });\n\t}\n\n\trender(animate = true) {\n\t\t// Create the clipPath\n\t\tthis.createClipPath();\n\t}\n\n\tcreateClipPath() {\n\t\tconst svg = this.parent;\n\t\tconst { cartesianScales } = this.services;\n\t\tconst mainXScale = cartesianScales.getMainXScale();\n\t\tconst mainYScale = cartesianScales.getMainYScale();\n\n\t\tconst [xScaleStart, xScaleEnd] = mainXScale.range();\n\t\tconst [yScaleEnd, yScaleStart] = mainYScale.range();\n\n\t\t// Get height\n\t\tthis.chartClipPath = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`clipPath.${this.type}`\n\t\t).attr(\"id\", this.chartClipId);\n\t\tconst clipRect = DOMUtils.appendOrSelect(\n\t\t\tthis.chartClipPath,\n\t\t\t`rect.${this.type}`\n\t\t);\n\t\tclipRect\n\t\t\t.attr(\"x\", xScaleStart)\n\t\t\t.attr(\"y\", yScaleStart)\n\t\t\t.attr(\"width\", xScaleEnd - xScaleStart)\n\t\t\t.attr(\"height\", yScaleEnd - yScaleStart);\n\n\t\tthis.chartClipPath.merge(clipRect).lower();\n\t}\n}\n"]}
1
+ {"version":3,"file":"chart-clip.js","sourceRoot":"","sources":["chart-clip.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,yEAAyE;AACzE,0CAA0C;AAC1C;IAA+B,6BAAS;IASvC,mBAAY,KAAiB,EAAE,QAAa,EAAE,OAAa;QAA3D,YACC,kBAAM,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,SAE/B;QAXD,UAAI,GAAG,YAAY,CAAC;QAEpB,sCAAsC;QACtC,oEAAoE;QACpE,iBAAW,GAAG,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC;QAMxE,KAAI,CAAC,IAAI,EAAE,CAAC;;IACb,CAAC;IAED,wBAAI,GAAJ;QACC,gDAAgD;QAChD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,0BAAM,GAAN,UAAO,OAAc;QAAd,wBAAA,EAAA,cAAc;QACpB,sBAAsB;QACtB,IAAI,CAAC,cAAc,EAAE,CAAC;IACvB,CAAC;IAED,kCAAc,GAAd;QACC,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QAChB,IAAA,+CAAe,CAAmB;QAC1C,IAAM,UAAU,GAAG,eAAe,CAAC,aAAa,EAAE,CAAC;QACnD,IAAM,UAAU,GAAG,eAAe,CAAC,aAAa,EAAE,CAAC;QAE7C,IAAA,uBAA6C,EAA5C,mBAAW,EAAE,iBAA+B,CAAC;QAC9C,IAAA,uBAA6C,EAA5C,iBAAS,EAAE,mBAAiC,CAAC;QAEpD,aAAa;QACb,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,cAAc,CAC3C,GAAG,EACH,cAAY,IAAI,CAAC,IAAM,CACvB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/B,IAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CACvC,IAAI,CAAC,aAAa,EAClB,UAAQ,IAAI,CAAC,IAAM,CACnB,CAAC;QACF,QAAQ;aACN,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC;aACtB,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC;aACtB,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,WAAW,CAAC;aACtC,IAAI,CAAC,QAAQ,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC;QAE1C,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;IAC5C,CAAC;IACF,gBAAC;AAAD,CAAC,AAlDD,CAA+B,SAAS,GAkDvC","sourcesContent":["// Internal Imports\nimport { Component } from '../component';\nimport { DOMUtils } from '../../services';\nimport { ChartModel } from '../../model';\n\n// This class is used to create the clipPath to clip the chart components\n// It's necessary for zoom in/out behavior\nexport class ChartClip extends Component {\n\ttype = 'chart-clip';\n\n\t// Give every chart-clip a distinct ID\n\t// so they don't interfere each other in a page with multiple charts\n\tchartClipId = 'chart-clip-id-' + Math.floor(Math.random() * 99999999999);\n\n\tchartClipPath: any;\n\n\tconstructor(model: ChartModel, services: any, configs?: any) {\n\t\tsuper(model, services, configs);\n\t\tthis.init();\n\t}\n\n\tinit() {\n\t\t// set unique chartClipId in this chart to model\n\t\tthis.model.set({ chartClipId: this.chartClipId }, { skipUpdate: true });\n\t}\n\n\trender(animate = true) {\n\t\t// Create the clipPath\n\t\tthis.createClipPath();\n\t}\n\n\tcreateClipPath() {\n\t\tconst svg = this.parent;\n\t\tconst { cartesianScales } = this.services;\n\t\tconst mainXScale = cartesianScales.getMainXScale();\n\t\tconst mainYScale = cartesianScales.getMainYScale();\n\n\t\tconst [xScaleStart, xScaleEnd] = mainXScale.range();\n\t\tconst [yScaleEnd, yScaleStart] = mainYScale.range();\n\n\t\t// Get height\n\t\tthis.chartClipPath = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`clipPath.${this.type}`\n\t\t).attr('id', this.chartClipId);\n\t\tconst clipRect = DOMUtils.appendOrSelect(\n\t\t\tthis.chartClipPath,\n\t\t\t`rect.${this.type}`\n\t\t);\n\t\tclipRect\n\t\t\t.attr('x', xScaleStart)\n\t\t\t.attr('y', yScaleStart)\n\t\t\t.attr('width', xScaleEnd - xScaleStart)\n\t\t\t.attr('height', yScaleEnd - yScaleStart);\n\n\t\tthis.chartClipPath.merge(clipRect).lower();\n\t}\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { Component } from "../component";
1
+ import { Component } from '../component';
2
2
  export declare class ChartBrush extends Component {
3
3
  static DASH_LENGTH: number;
4
4
  type: string;
@@ -12,21 +12,21 @@ var __extends = (this && this.__extends) || (function () {
12
12
  };
13
13
  })();
14
14
  // Internal Imports
15
- import { Component } from "../component";
16
- import { ScaleTypes } from "../../interfaces";
17
- import { DOMUtils } from "../../services";
15
+ import { Component } from '../component';
16
+ import { ScaleTypes } from '../../interfaces';
17
+ import { DOMUtils } from '../../services';
18
18
  // D3 Imports
19
- import { brushX } from "d3-brush";
20
- import { event, mouse } from "d3-selection";
21
- import { scaleTime } from "d3-scale";
19
+ import { brushX } from 'd3-brush';
20
+ import { event, mouse } from 'd3-selection';
21
+ import { scaleTime } from 'd3-scale';
22
22
  // This class is used for handle brush events in chart
23
23
  var ChartBrush = /** @class */ (function (_super) {
24
24
  __extends(ChartBrush, _super);
25
25
  function ChartBrush() {
26
26
  var _this = _super !== null && _super.apply(this, arguments) || this;
27
- _this.type = "grid-brush";
28
- _this.selectionSelector = "rect.selection"; // needs to match the class name in d3.brush
29
- _this.frontSelectionSelector = "rect.frontSelection"; // needs to match the class name in _grid-brush.scss
27
+ _this.type = 'grid-brush';
28
+ _this.selectionSelector = 'rect.selection'; // needs to match the class name in d3.brush
29
+ _this.frontSelectionSelector = 'rect.frontSelection'; // needs to match the class name in _grid-brush.scss
30
30
  return _this;
31
31
  }
32
32
  ChartBrush.prototype.render = function (animate) {
@@ -35,23 +35,23 @@ var ChartBrush = /** @class */ (function (_super) {
35
35
  var svg = this.parent;
36
36
  // use this area to display selection above all graphs
37
37
  var frontSelectionArea = this.getContainerSVG();
38
- var backdrop = DOMUtils.appendOrSelect(svg, "svg.chart-grid-backdrop");
38
+ var backdrop = DOMUtils.appendOrSelect(svg, 'svg.chart-grid-backdrop');
39
39
  // use this area to handle d3 brush events
40
40
  var brushArea = DOMUtils.appendOrSelect(backdrop, "g." + this.type);
41
41
  // set an id for rect.selection to be referred
42
42
  var d3Selection = DOMUtils.appendOrSelect(brushArea, this.selectionSelector);
43
43
  var _a = DOMUtils.getSVGElementSize(backdrop, {
44
- useAttrs: true
44
+ useAttrs: true,
45
45
  }), width = _a.width, height = _a.height;
46
46
  var cartesianScales = this.services.cartesianScales;
47
47
  var mainXScaleType = cartesianScales.getMainXScaleType();
48
48
  var mainXScale = cartesianScales.getMainXScale();
49
49
  var _b = mainXScale.range(), xScaleStart = _b[0], xScaleEnd = _b[1];
50
- frontSelectionArea.attr("transform", "translate(" + xScaleStart + ",0)");
50
+ frontSelectionArea.attr('transform', "translate(" + xScaleStart + ",0)");
51
51
  var frontSelection = DOMUtils.appendOrSelect(frontSelectionArea, this.frontSelectionSelector);
52
52
  if (mainXScale && mainXScaleType === ScaleTypes.TIME) {
53
53
  // get current zoomDomain
54
- var zoomDomain_1 = this.model.get("zoomDomain");
54
+ var zoomDomain_1 = this.model.get('zoomDomain');
55
55
  if (zoomDomain_1 === undefined) {
56
56
  // default to full range with extended domain
57
57
  zoomDomain_1 = this.services.zoom.getDefaultZoomBarDomain();
@@ -62,21 +62,21 @@ var ChartBrush = /** @class */ (function (_super) {
62
62
  var updateSelectionDash_1 = function (selection) {
63
63
  // set end drag point to dash
64
64
  var selectionWidth = selection[1] - selection[0];
65
- var dashArray = "0," + selectionWidth.toString(); // top (invisible)
65
+ var dashArray = '0,' + selectionWidth.toString(); // top (invisible)
66
66
  // right
67
67
  var dashCount = Math.floor(height / ChartBrush.DASH_LENGTH);
68
68
  var totalRightDash = dashCount * ChartBrush.DASH_LENGTH;
69
69
  for (var i = 0; i < dashCount; i++) {
70
- dashArray += "," + ChartBrush.DASH_LENGTH; // for each full length dash
70
+ dashArray += ',' + ChartBrush.DASH_LENGTH; // for each full length dash
71
71
  }
72
- dashArray += "," + (height - totalRightDash); // for rest of the right height
72
+ dashArray += ',' + (height - totalRightDash); // for rest of the right height
73
73
  // if dash count is even, one more ",0" is needed to make total right dash pattern even
74
74
  if (dashCount % 2 === 1) {
75
- dashArray += ",0";
75
+ dashArray += ',0';
76
76
  }
77
- dashArray += "," + selectionWidth.toString(); // bottom (invisible)
78
- dashArray += "," + height.toString(); // left
79
- frontSelection.attr("stroke-dasharray", dashArray);
77
+ dashArray += ',' + selectionWidth.toString(); // bottom (invisible)
78
+ dashArray += ',' + height.toString(); // left
79
+ frontSelection.attr('stroke-dasharray', dashArray);
80
80
  };
81
81
  var brushEventHandler = function () {
82
82
  // selection range: [0, width]
@@ -86,12 +86,12 @@ var ChartBrush = /** @class */ (function (_super) {
86
86
  }
87
87
  // copy the d3 selection attrs to front selection element
88
88
  frontSelection
89
- .attr("x", d3Selection.attr("x"))
90
- .attr("y", d3Selection.attr("y"))
91
- .attr("width", d3Selection.attr("width"))
92
- .attr("height", d3Selection.attr("height"))
93
- .style("cursor", "pointer")
94
- .style("display", null);
89
+ .attr('x', d3Selection.attr('x'))
90
+ .attr('y', d3Selection.attr('y'))
91
+ .attr('width', d3Selection.attr('width'))
92
+ .attr('height', d3Selection.attr('height'))
93
+ .style('cursor', 'pointer')
94
+ .style('display', null);
95
95
  updateSelectionDash_1(selection);
96
96
  };
97
97
  // assume max range is [0, width]
@@ -100,7 +100,7 @@ var ChartBrush = /** @class */ (function (_super) {
100
100
  var xScale = scaleTime().range([0, width]).domain(zoomDomain_1);
101
101
  var newDomain = [
102
102
  xScale.invert(startPoint),
103
- xScale.invert(endPoint)
103
+ xScale.invert(endPoint),
104
104
  ];
105
105
  // if selected start time and end time are the same
106
106
  // reset to default full range
@@ -123,20 +123,20 @@ var ChartBrush = /** @class */ (function (_super) {
123
123
  // clear brush selection
124
124
  brushArea.call(brush_1.move, null);
125
125
  // hide frontSelection
126
- frontSelection.style("display", "none");
126
+ frontSelection.style('display', 'none');
127
127
  }
128
128
  };
129
129
  // leave some space to display selection strokes besides axis
130
130
  var brush_1 = brushX()
131
131
  .extent([
132
132
  [0, 0],
133
- [width - 1, height]
133
+ [width - 1, height],
134
134
  ])
135
- .on("start brush end", brushEventHandler)
136
- .on("end.brushed", brushed);
135
+ .on('start brush end', brushEventHandler)
136
+ .on('end.brushed', brushed);
137
137
  brushArea.call(brush_1);
138
138
  var zoomRatio_1 = this.services.zoom.getZoomRatio();
139
- backdrop.on("click", function () {
139
+ backdrop.on('click', function () {
140
140
  if (event.shiftKey) {
141
141
  // clickedX range: [0, width]
142
142
  var clickedX = mouse(brushArea.node())[0];
@@ -1 +1 @@
1
- {"version":3,"file":"grid-brush.js","sourceRoot":"","sources":["grid-brush.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { Events, ScaleTypes } from \"../../interfaces\";\nimport { DOMUtils } from \"../../services\";\n\n// D3 Imports\nimport { brushX } from \"d3-brush\";\nimport { event, mouse } from \"d3-selection\";\nimport { scaleTime } from \"d3-scale\";\n\n// This class is used for handle brush events in chart\nexport class ChartBrush extends Component {\n\tstatic DASH_LENGTH = 4;\n\n\ttype = \"grid-brush\";\n\n\tselectionSelector = \"rect.selection\"; // needs to match the class name in d3.brush\n\n\tfrontSelectionSelector = \"rect.frontSelection\"; // needs to match the class name in _grid-brush.scss\n\n\trender(animate = true) {\n\t\tconst svg = this.parent;\n\t\t// use this area to display selection above all graphs\n\t\tconst frontSelectionArea = this.getContainerSVG();\n\t\tconst backdrop = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t\"svg.chart-grid-backdrop\"\n\t\t);\n\t\t// use this area to handle d3 brush events\n\t\tconst brushArea = DOMUtils.appendOrSelect(backdrop, `g.${this.type}`);\n\n\t\t// set an id for rect.selection to be referred\n\t\tconst d3Selection = DOMUtils.appendOrSelect(\n\t\t\tbrushArea,\n\t\t\tthis.selectionSelector\n\t\t);\n\n\t\tconst { width, height } = DOMUtils.getSVGElementSize(backdrop, {\n\t\t\tuseAttrs: true\n\t\t});\n\n\t\tconst { cartesianScales } = this.services;\n\t\tconst mainXScaleType = cartesianScales.getMainXScaleType();\n\t\tconst mainXScale = cartesianScales.getMainXScale();\n\t\tconst [xScaleStart, xScaleEnd] = mainXScale.range();\n\t\tfrontSelectionArea.attr(\"transform\", `translate(${xScaleStart},0)`);\n\t\tconst frontSelection = DOMUtils.appendOrSelect(\n\t\t\tfrontSelectionArea,\n\t\t\tthis.frontSelectionSelector\n\t\t);\n\n\t\tif (mainXScale && mainXScaleType === ScaleTypes.TIME) {\n\t\t\t// get current zoomDomain\n\t\t\tlet zoomDomain = this.model.get(\"zoomDomain\");\n\t\t\tif (zoomDomain === undefined) {\n\t\t\t\t// default to full range with extended domain\n\t\t\t\tzoomDomain = this.services.zoom.getDefaultZoomBarDomain();\n\t\t\t\tif (zoomDomain) {\n\t\t\t\t\tthis.model.set(\n\t\t\t\t\t\t{ zoomDomain: zoomDomain },\n\t\t\t\t\t\t{ animate: false }\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst updateSelectionDash = (selection) => {\n\t\t\t\t// set end drag point to dash\n\t\t\t\tconst selectionWidth = selection[1] - selection[0];\n\t\t\t\tlet dashArray = \"0,\" + selectionWidth.toString(); // top (invisible)\n\n\t\t\t\t// right\n\t\t\t\tconst dashCount = Math.floor(height / ChartBrush.DASH_LENGTH);\n\t\t\t\tconst totalRightDash = dashCount * ChartBrush.DASH_LENGTH;\n\t\t\t\tfor (let i = 0; i < dashCount; i++) {\n\t\t\t\t\tdashArray += \",\" + ChartBrush.DASH_LENGTH; // for each full length dash\n\t\t\t\t}\n\t\t\t\tdashArray += \",\" + (height - totalRightDash); // for rest of the right height\n\t\t\t\t// if dash count is even, one more \",0\" is needed to make total right dash pattern even\n\t\t\t\tif (dashCount % 2 === 1) {\n\t\t\t\t\tdashArray += \",0\";\n\t\t\t\t}\n\n\t\t\t\tdashArray += \",\" + selectionWidth.toString(); // bottom (invisible)\n\t\t\t\tdashArray += \",\" + height.toString(); // left\n\n\t\t\t\tfrontSelection.attr(\"stroke-dasharray\", dashArray);\n\t\t\t};\n\n\t\t\tconst brushEventHandler = () => {\n\t\t\t\t// selection range: [0, width]\n\t\t\t\tconst selection = event.selection;\n\t\t\t\tif (selection === null || selection[0] === selection[1]) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// copy the d3 selection attrs to front selection element\n\t\t\t\tfrontSelection\n\t\t\t\t\t.attr(\"x\", d3Selection.attr(\"x\"))\n\t\t\t\t\t.attr(\"y\", d3Selection.attr(\"y\"))\n\t\t\t\t\t.attr(\"width\", d3Selection.attr(\"width\"))\n\t\t\t\t\t.attr(\"height\", d3Selection.attr(\"height\"))\n\t\t\t\t\t.style(\"cursor\", \"pointer\")\n\t\t\t\t\t.style(\"display\", null);\n\n\t\t\t\tupdateSelectionDash(selection);\n\t\t\t};\n\n\t\t\t// assume max range is [0, width]\n\t\t\tconst updateZoomDomain = (startPoint, endPoint) => {\n\t\t\t\t// create xScale based on current zoomDomain\n\t\t\t\tconst xScale = scaleTime().range([0, width]).domain(zoomDomain);\n\n\t\t\t\tlet newDomain = [\n\t\t\t\t\txScale.invert(startPoint),\n\t\t\t\t\txScale.invert(endPoint)\n\t\t\t\t];\n\t\t\t\t// if selected start time and end time are the same\n\t\t\t\t// reset to default full range\n\t\t\t\tif (newDomain[0].valueOf() === newDomain[1].valueOf()) {\n\t\t\t\t\t// same as d3 behavior and zoom bar behavior: set to default full range\n\t\t\t\t\tnewDomain = this.services.zoom.getDefaultZoomBarDomain();\n\t\t\t\t}\n\n\t\t\t\t// only if zoomDomain needs update\n\t\t\t\tif (\n\t\t\t\t\tzoomDomain[0].valueOf() !== newDomain[0].valueOf() ||\n\t\t\t\t\tzoomDomain[1].valueOf() !== newDomain[1].valueOf()\n\t\t\t\t) {\n\t\t\t\t\tthis.services.zoom.handleDomainChange(newDomain);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst brushed = () => {\n\t\t\t\t// max selection range: [0, width]\n\t\t\t\tconst selection = event.selection;\n\n\t\t\t\tif (selection !== null) {\n\t\t\t\t\t// updateZoomDomain assumes max range is [0, width]\n\t\t\t\t\tupdateZoomDomain(selection[0], selection[1]);\n\n\t\t\t\t\t// clear brush selection\n\t\t\t\t\tbrushArea.call(brush.move, null);\n\t\t\t\t\t// hide frontSelection\n\t\t\t\t\tfrontSelection.style(\"display\", \"none\");\n\t\t\t\t}\n\t\t\t};\n\t\t\t// leave some space to display selection strokes besides axis\n\t\t\tconst brush = brushX()\n\t\t\t\t.extent([\n\t\t\t\t\t[0, 0],\n\t\t\t\t\t[width - 1, height]\n\t\t\t\t])\n\t\t\t\t.on(\"start brush end\", brushEventHandler)\n\t\t\t\t.on(\"end.brushed\", brushed);\n\n\t\t\tbrushArea.call(brush);\n\n\t\t\tconst zoomRatio = this.services.zoom.getZoomRatio();\n\t\t\tbackdrop.on(\"click\", function () {\n\t\t\t\tif (event.shiftKey) {\n\t\t\t\t\t// clickedX range: [0, width]\n\t\t\t\t\tconst clickedX = mouse(brushArea.node())[0];\n\n\t\t\t\t\tlet leftPoint = clickedX - (width * zoomRatio) / 2;\n\t\t\t\t\tif (leftPoint < 0) {\n\t\t\t\t\t\tleftPoint = 0;\n\t\t\t\t\t}\n\t\t\t\t\tlet rightPoint = clickedX + (width * zoomRatio) / 2;\n\t\t\t\t\tif (rightPoint > width) {\n\t\t\t\t\t\trightPoint = width;\n\t\t\t\t\t}\n\t\t\t\t\t// updateZoomDomain assumes max range is [0, width]\n\t\t\t\t\tupdateZoomDomain(leftPoint, rightPoint);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"grid-brush.js","sourceRoot":"","sources":["grid-brush.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAU,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,aAAa;AACb,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,sDAAsD;AACtD;IAAgC,8BAAS;IAAzC;QAAA,qEAsKC;QAnKA,UAAI,GAAG,YAAY,CAAC;QAEpB,uBAAiB,GAAG,gBAAgB,CAAC,CAAC,4CAA4C;QAElF,4BAAsB,GAAG,qBAAqB,CAAC,CAAC,oDAAoD;;IA+JrG,CAAC;IA7JA,2BAAM,GAAN,UAAO,OAAc;QAArB,iBA4JC;QA5JM,wBAAA,EAAA,cAAc;QACpB,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,sDAAsD;QACtD,IAAM,kBAAkB,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAClD,IAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CACvC,GAAG,EACH,yBAAyB,CACzB,CAAC;QACF,0CAA0C;QAC1C,IAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAK,IAAI,CAAC,IAAM,CAAC,CAAC;QAEtE,8CAA8C;QAC9C,IAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAC1C,SAAS,EACT,IAAI,CAAC,iBAAiB,CACtB,CAAC;QAEI,IAAA;;UAEJ,EAFM,gBAAK,EAAE,kBAEb,CAAC;QAEK,IAAA,+CAAe,CAAmB;QAC1C,IAAM,cAAc,GAAG,eAAe,CAAC,iBAAiB,EAAE,CAAC;QAC3D,IAAM,UAAU,GAAG,eAAe,CAAC,aAAa,EAAE,CAAC;QAC7C,IAAA,uBAA6C,EAA5C,mBAAW,EAAE,iBAA+B,CAAC;QACpD,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,eAAa,WAAW,QAAK,CAAC,CAAC;QACpE,IAAM,cAAc,GAAG,QAAQ,CAAC,cAAc,CAC7C,kBAAkB,EAClB,IAAI,CAAC,sBAAsB,CAC3B,CAAC;QAEF,IAAI,UAAU,IAAI,cAAc,KAAK,UAAU,CAAC,IAAI,EAAE;YACrD,yBAAyB;YACzB,IAAI,YAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC9C,IAAI,YAAU,KAAK,SAAS,EAAE;gBAC7B,6CAA6C;gBAC7C,YAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBAC1D,IAAI,YAAU,EAAE;oBACf,IAAI,CAAC,KAAK,CAAC,GAAG,CACb,EAAE,UAAU,EAAE,YAAU,EAAE,EAC1B,EAAE,OAAO,EAAE,KAAK,EAAE,CAClB,CAAC;iBACF;aACD;YAED,IAAM,qBAAmB,GAAG,UAAC,SAAS;gBACrC,6BAA6B;gBAC7B,IAAM,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBACnD,IAAI,SAAS,GAAG,IAAI,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,kBAAkB;gBAEpE,QAAQ;gBACR,IAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;gBAC9D,IAAM,cAAc,GAAG,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC;gBAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;oBACnC,SAAS,IAAI,GAAG,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,4BAA4B;iBACvE;gBACD,SAAS,IAAI,GAAG,GAAG,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,+BAA+B;gBAC7E,uFAAuF;gBACvF,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE;oBACxB,SAAS,IAAI,IAAI,CAAC;iBAClB;gBAED,SAAS,IAAI,GAAG,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,qBAAqB;gBACnE,SAAS,IAAI,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO;gBAE7C,cAAc,CAAC,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;YACpD,CAAC,CAAC;YAEF,IAAM,iBAAiB,GAAG;gBACzB,8BAA8B;gBAC9B,IAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;gBAClC,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE;oBACxD,OAAO;iBACP;gBAED,yDAAyD;gBACzD,cAAc;qBACZ,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;qBAChC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;qBAChC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;qBACxC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;qBAC1C,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC;qBAC1B,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBAEzB,qBAAmB,CAAC,SAAS,CAAC,CAAC;YAChC,CAAC,CAAC;YAEF,iCAAiC;YACjC,IAAM,kBAAgB,GAAG,UAAC,UAAU,EAAE,QAAQ;gBAC7C,4CAA4C;gBAC5C,IAAM,MAAM,GAAG,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,YAAU,CAAC,CAAC;gBAEhE,IAAI,SAAS,GAAG;oBACf,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;oBACzB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;iBACvB,CAAC;gBACF,mDAAmD;gBACnD,8BAA8B;gBAC9B,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE;oBACtD,uEAAuE;oBACvE,SAAS,GAAG,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC;iBACzD;gBAED,kCAAkC;gBAClC,IACC,YAAU,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;oBAClD,YAAU,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EACjD;oBACD,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;iBACjD;YACF,CAAC,CAAC;YAEF,IAAM,OAAO,GAAG;gBACf,kCAAkC;gBAClC,IAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;gBAElC,IAAI,SAAS,KAAK,IAAI,EAAE;oBACvB,mDAAmD;oBACnD,kBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;oBAE7C,wBAAwB;oBACxB,SAAS,CAAC,IAAI,CAAC,OAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBACjC,sBAAsB;oBACtB,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;iBACxC;YACF,CAAC,CAAC;YACF,6DAA6D;YAC7D,IAAM,OAAK,GAAG,MAAM,EAAE;iBACpB,MAAM,CAAC;gBACP,CAAC,CAAC,EAAE,CAAC,CAAC;gBACN,CAAC,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC;aACnB,CAAC;iBACD,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;iBACxC,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YAE7B,SAAS,CAAC,IAAI,CAAC,OAAK,CAAC,CAAC;YAEtB,IAAM,WAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACpD,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE;gBACpB,IAAI,KAAK,CAAC,QAAQ,EAAE;oBACnB,6BAA6B;oBAC7B,IAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAE5C,IAAI,SAAS,GAAG,QAAQ,GAAG,CAAC,KAAK,GAAG,WAAS,CAAC,GAAG,CAAC,CAAC;oBACnD,IAAI,SAAS,GAAG,CAAC,EAAE;wBAClB,SAAS,GAAG,CAAC,CAAC;qBACd;oBACD,IAAI,UAAU,GAAG,QAAQ,GAAG,CAAC,KAAK,GAAG,WAAS,CAAC,GAAG,CAAC,CAAC;oBACpD,IAAI,UAAU,GAAG,KAAK,EAAE;wBACvB,UAAU,GAAG,KAAK,CAAC;qBACnB;oBACD,mDAAmD;oBACnD,kBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;iBACxC;YACF,CAAC,CAAC,CAAC;SACH;IACF,CAAC;IApKM,sBAAW,GAAG,CAAC,CAAC;IAqKxB,iBAAC;CAAA,AAtKD,CAAgC,SAAS,GAsKxC;SAtKY,UAAU","sourcesContent":["// Internal Imports\nimport { Component } from '../component';\nimport { Events, ScaleTypes } from '../../interfaces';\nimport { DOMUtils } from '../../services';\n\n// D3 Imports\nimport { brushX } from 'd3-brush';\nimport { event, mouse } from 'd3-selection';\nimport { scaleTime } from 'd3-scale';\n\n// This class is used for handle brush events in chart\nexport class ChartBrush extends Component {\n\tstatic DASH_LENGTH = 4;\n\n\ttype = 'grid-brush';\n\n\tselectionSelector = 'rect.selection'; // needs to match the class name in d3.brush\n\n\tfrontSelectionSelector = 'rect.frontSelection'; // needs to match the class name in _grid-brush.scss\n\n\trender(animate = true) {\n\t\tconst svg = this.parent;\n\t\t// use this area to display selection above all graphs\n\t\tconst frontSelectionArea = this.getContainerSVG();\n\t\tconst backdrop = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t'svg.chart-grid-backdrop'\n\t\t);\n\t\t// use this area to handle d3 brush events\n\t\tconst brushArea = DOMUtils.appendOrSelect(backdrop, `g.${this.type}`);\n\n\t\t// set an id for rect.selection to be referred\n\t\tconst d3Selection = DOMUtils.appendOrSelect(\n\t\t\tbrushArea,\n\t\t\tthis.selectionSelector\n\t\t);\n\n\t\tconst { width, height } = DOMUtils.getSVGElementSize(backdrop, {\n\t\t\tuseAttrs: true,\n\t\t});\n\n\t\tconst { cartesianScales } = this.services;\n\t\tconst mainXScaleType = cartesianScales.getMainXScaleType();\n\t\tconst mainXScale = cartesianScales.getMainXScale();\n\t\tconst [xScaleStart, xScaleEnd] = mainXScale.range();\n\t\tfrontSelectionArea.attr('transform', `translate(${xScaleStart},0)`);\n\t\tconst frontSelection = DOMUtils.appendOrSelect(\n\t\t\tfrontSelectionArea,\n\t\t\tthis.frontSelectionSelector\n\t\t);\n\n\t\tif (mainXScale && mainXScaleType === ScaleTypes.TIME) {\n\t\t\t// get current zoomDomain\n\t\t\tlet zoomDomain = this.model.get('zoomDomain');\n\t\t\tif (zoomDomain === undefined) {\n\t\t\t\t// default to full range with extended domain\n\t\t\t\tzoomDomain = this.services.zoom.getDefaultZoomBarDomain();\n\t\t\t\tif (zoomDomain) {\n\t\t\t\t\tthis.model.set(\n\t\t\t\t\t\t{ zoomDomain: zoomDomain },\n\t\t\t\t\t\t{ animate: false }\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst updateSelectionDash = (selection) => {\n\t\t\t\t// set end drag point to dash\n\t\t\t\tconst selectionWidth = selection[1] - selection[0];\n\t\t\t\tlet dashArray = '0,' + selectionWidth.toString(); // top (invisible)\n\n\t\t\t\t// right\n\t\t\t\tconst dashCount = Math.floor(height / ChartBrush.DASH_LENGTH);\n\t\t\t\tconst totalRightDash = dashCount * ChartBrush.DASH_LENGTH;\n\t\t\t\tfor (let i = 0; i < dashCount; i++) {\n\t\t\t\t\tdashArray += ',' + ChartBrush.DASH_LENGTH; // for each full length dash\n\t\t\t\t}\n\t\t\t\tdashArray += ',' + (height - totalRightDash); // for rest of the right height\n\t\t\t\t// if dash count is even, one more \",0\" is needed to make total right dash pattern even\n\t\t\t\tif (dashCount % 2 === 1) {\n\t\t\t\t\tdashArray += ',0';\n\t\t\t\t}\n\n\t\t\t\tdashArray += ',' + selectionWidth.toString(); // bottom (invisible)\n\t\t\t\tdashArray += ',' + height.toString(); // left\n\n\t\t\t\tfrontSelection.attr('stroke-dasharray', dashArray);\n\t\t\t};\n\n\t\t\tconst brushEventHandler = () => {\n\t\t\t\t// selection range: [0, width]\n\t\t\t\tconst selection = event.selection;\n\t\t\t\tif (selection === null || selection[0] === selection[1]) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// copy the d3 selection attrs to front selection element\n\t\t\t\tfrontSelection\n\t\t\t\t\t.attr('x', d3Selection.attr('x'))\n\t\t\t\t\t.attr('y', d3Selection.attr('y'))\n\t\t\t\t\t.attr('width', d3Selection.attr('width'))\n\t\t\t\t\t.attr('height', d3Selection.attr('height'))\n\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t\t.style('display', null);\n\n\t\t\t\tupdateSelectionDash(selection);\n\t\t\t};\n\n\t\t\t// assume max range is [0, width]\n\t\t\tconst updateZoomDomain = (startPoint, endPoint) => {\n\t\t\t\t// create xScale based on current zoomDomain\n\t\t\t\tconst xScale = scaleTime().range([0, width]).domain(zoomDomain);\n\n\t\t\t\tlet newDomain = [\n\t\t\t\t\txScale.invert(startPoint),\n\t\t\t\t\txScale.invert(endPoint),\n\t\t\t\t];\n\t\t\t\t// if selected start time and end time are the same\n\t\t\t\t// reset to default full range\n\t\t\t\tif (newDomain[0].valueOf() === newDomain[1].valueOf()) {\n\t\t\t\t\t// same as d3 behavior and zoom bar behavior: set to default full range\n\t\t\t\t\tnewDomain = this.services.zoom.getDefaultZoomBarDomain();\n\t\t\t\t}\n\n\t\t\t\t// only if zoomDomain needs update\n\t\t\t\tif (\n\t\t\t\t\tzoomDomain[0].valueOf() !== newDomain[0].valueOf() ||\n\t\t\t\t\tzoomDomain[1].valueOf() !== newDomain[1].valueOf()\n\t\t\t\t) {\n\t\t\t\t\tthis.services.zoom.handleDomainChange(newDomain);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst brushed = () => {\n\t\t\t\t// max selection range: [0, width]\n\t\t\t\tconst selection = event.selection;\n\n\t\t\t\tif (selection !== null) {\n\t\t\t\t\t// updateZoomDomain assumes max range is [0, width]\n\t\t\t\t\tupdateZoomDomain(selection[0], selection[1]);\n\n\t\t\t\t\t// clear brush selection\n\t\t\t\t\tbrushArea.call(brush.move, null);\n\t\t\t\t\t// hide frontSelection\n\t\t\t\t\tfrontSelection.style('display', 'none');\n\t\t\t\t}\n\t\t\t};\n\t\t\t// leave some space to display selection strokes besides axis\n\t\t\tconst brush = brushX()\n\t\t\t\t.extent([\n\t\t\t\t\t[0, 0],\n\t\t\t\t\t[width - 1, height],\n\t\t\t\t])\n\t\t\t\t.on('start brush end', brushEventHandler)\n\t\t\t\t.on('end.brushed', brushed);\n\n\t\t\tbrushArea.call(brush);\n\n\t\t\tconst zoomRatio = this.services.zoom.getZoomRatio();\n\t\t\tbackdrop.on('click', function () {\n\t\t\t\tif (event.shiftKey) {\n\t\t\t\t\t// clickedX range: [0, width]\n\t\t\t\t\tconst clickedX = mouse(brushArea.node())[0];\n\n\t\t\t\t\tlet leftPoint = clickedX - (width * zoomRatio) / 2;\n\t\t\t\t\tif (leftPoint < 0) {\n\t\t\t\t\t\tleftPoint = 0;\n\t\t\t\t\t}\n\t\t\t\t\tlet rightPoint = clickedX + (width * zoomRatio) / 2;\n\t\t\t\t\tif (rightPoint > width) {\n\t\t\t\t\t\trightPoint = width;\n\t\t\t\t\t}\n\t\t\t\t\t// updateZoomDomain assumes max range is [0, width]\n\t\t\t\t\tupdateZoomDomain(leftPoint, rightPoint);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { Component } from "../component";
1
+ import { Component } from '../component';
2
2
  export declare class Grid extends Component {
3
3
  type: string;
4
4
  backdrop: any;