@carbon/charts 0.41.4 → 0.41.5

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 (152) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/axis-chart.js +2 -0
  3. package/axis-chart.js.map +1 -1
  4. package/build/demo/data/area.d.ts +25 -0
  5. package/build/demo/data/bubble.d.ts +24 -0
  6. package/build/demo/data/combo.d.ts +422 -0
  7. package/build/demo/data/index.d.ts +6 -0
  8. package/build/demo/data/line.d.ts +31 -0
  9. package/build/demo/data/scatter.d.ts +31 -0
  10. package/build/src/axis-chart.d.ts +1 -1
  11. package/build/src/chart.d.ts +1 -1
  12. package/build/src/charts/bar-stacked.d.ts +2 -2
  13. package/build/src/charts/combo.d.ts +7 -0
  14. package/build/src/charts/index.d.ts +1 -0
  15. package/build/src/components/axes/{ruler-stacked-bar.d.ts → ruler-stacked.d.ts} +1 -1
  16. package/build/src/components/axes/zoom-bar.d.ts +1 -1
  17. package/build/src/components/component.d.ts +7 -0
  18. package/build/src/components/graphs/scatter.d.ts +0 -1
  19. package/build/src/components/index.d.ts +2 -1
  20. package/build/src/configuration.d.ts +2 -1
  21. package/build/src/interfaces/charts.d.ts +11 -2
  22. package/build/src/interfaces/enums.d.ts +12 -0
  23. package/build/src/model.d.ts +17 -10
  24. package/build/src/services/scales-cartesian.d.ts +27 -9
  25. package/build/src/tools.d.ts +2 -0
  26. package/bundle.js +1 -1
  27. package/charts/area-stacked.js +2 -2
  28. package/charts/area-stacked.js.map +1 -1
  29. package/charts/bar-stacked.d.ts +2 -2
  30. package/charts/bar-stacked.js +2 -2
  31. package/charts/bar-stacked.js.map +1 -1
  32. package/charts/combo.d.ts +7 -0
  33. package/charts/combo.js +111 -0
  34. package/charts/combo.js.map +1 -0
  35. package/charts/index.d.ts +1 -0
  36. package/charts/index.js +1 -0
  37. package/charts/index.js.map +1 -1
  38. package/components/axes/axis.js +7 -8
  39. package/components/axes/axis.js.map +1 -1
  40. package/components/axes/grid.js +8 -9
  41. package/components/axes/grid.js.map +1 -1
  42. package/components/axes/{ruler-stacked-bar.d.ts → ruler-stacked.d.ts} +1 -1
  43. package/components/axes/{ruler-stacked-bar.js → ruler-stacked.js} +8 -8
  44. package/components/axes/ruler-stacked.js.map +1 -0
  45. package/components/axes/ruler.js +5 -5
  46. package/components/axes/ruler.js.map +1 -1
  47. package/components/axes/toolbar.js +4 -4
  48. package/components/axes/toolbar.js.map +1 -1
  49. package/components/axes/two-dimensional-axes.js +2 -2
  50. package/components/axes/two-dimensional-axes.js.map +1 -1
  51. package/components/axes/zero-line.js +12 -8
  52. package/components/axes/zero-line.js.map +1 -1
  53. package/components/axes/zoom-bar.d.ts +1 -1
  54. package/components/axes/zoom-bar.js +7 -7
  55. package/components/axes/zoom-bar.js.map +1 -1
  56. package/components/component.d.ts +7 -0
  57. package/components/component.js +24 -3
  58. package/components/component.js.map +1 -1
  59. package/components/essentials/legend.js +4 -4
  60. package/components/essentials/legend.js.map +1 -1
  61. package/components/essentials/threshold.js +4 -4
  62. package/components/essentials/threshold.js.map +1 -1
  63. package/components/essentials/title-meter.js +3 -3
  64. package/components/essentials/title-meter.js.map +1 -1
  65. package/components/essentials/title.js +1 -1
  66. package/components/essentials/title.js.map +1 -1
  67. package/components/essentials/tooltip-axis.js +10 -8
  68. package/components/essentials/tooltip-axis.js.map +1 -1
  69. package/components/essentials/tooltip.js +5 -5
  70. package/components/essentials/tooltip.js.map +1 -1
  71. package/components/graphs/area-stacked.js +11 -13
  72. package/components/graphs/area-stacked.js.map +1 -1
  73. package/components/graphs/area.js +15 -12
  74. package/components/graphs/area.js.map +1 -1
  75. package/components/graphs/bar-grouped.js +29 -23
  76. package/components/graphs/bar-grouped.js.map +1 -1
  77. package/components/graphs/bar-simple.js +4 -3
  78. package/components/graphs/bar-simple.js.map +1 -1
  79. package/components/graphs/bar-stacked.js +10 -8
  80. package/components/graphs/bar-stacked.js.map +1 -1
  81. package/components/graphs/bar.js +1 -1
  82. package/components/graphs/bar.js.map +1 -1
  83. package/components/graphs/bubble.js +4 -3
  84. package/components/graphs/bubble.js.map +1 -1
  85. package/components/graphs/donut.js +2 -2
  86. package/components/graphs/donut.js.map +1 -1
  87. package/components/graphs/gauge.js +7 -7
  88. package/components/graphs/gauge.js.map +1 -1
  89. package/components/graphs/line.js +24 -21
  90. package/components/graphs/line.js.map +1 -1
  91. package/components/graphs/meter.js +1 -1
  92. package/components/graphs/meter.js.map +1 -1
  93. package/components/graphs/pie.js +3 -3
  94. package/components/graphs/pie.js.map +1 -1
  95. package/components/graphs/radar.js +5 -5
  96. package/components/graphs/radar.js.map +1 -1
  97. package/components/graphs/scatter-stacked.js +14 -11
  98. package/components/graphs/scatter-stacked.js.map +1 -1
  99. package/components/graphs/scatter.d.ts +0 -1
  100. package/components/graphs/scatter.js +27 -32
  101. package/components/graphs/scatter.js.map +1 -1
  102. package/components/graphs/skeleton-lines.js +5 -5
  103. package/components/graphs/skeleton-lines.js.map +1 -1
  104. package/components/graphs/skeleton.js +4 -4
  105. package/components/graphs/skeleton.js.map +1 -1
  106. package/components/index.d.ts +2 -1
  107. package/components/index.js +2 -1
  108. package/components/index.js.map +1 -1
  109. package/configuration.d.ts +2 -1
  110. package/configuration.js +6 -2
  111. package/configuration.js.map +1 -1
  112. package/demo/data/area.d.ts +25 -0
  113. package/demo/data/area.js +41 -4
  114. package/demo/data/area.js.map +1 -1
  115. package/demo/data/bubble.d.ts +24 -0
  116. package/demo/data/bubble.js +39 -0
  117. package/demo/data/bubble.js.map +1 -1
  118. package/demo/data/bundle.js +1 -1
  119. package/demo/data/combo.d.ts +422 -0
  120. package/demo/data/combo.js +545 -0
  121. package/demo/data/combo.js.map +1 -0
  122. package/demo/data/index.d.ts +6 -0
  123. package/demo/data/index.js +102 -0
  124. package/demo/data/index.js.map +1 -1
  125. package/demo/data/line.d.ts +31 -0
  126. package/demo/data/line.js +38 -0
  127. package/demo/data/line.js.map +1 -1
  128. package/demo/data/scatter.d.ts +31 -0
  129. package/demo/data/scatter.js +33 -0
  130. package/demo/data/scatter.js.map +1 -1
  131. package/demo/data/zoom-bar.js.map +1 -1
  132. package/demo/tsconfig.tsbuildinfo +35 -21
  133. package/interfaces/charts.d.ts +11 -2
  134. package/interfaces/charts.js +1 -0
  135. package/interfaces/charts.js.map +1 -1
  136. package/interfaces/enums.d.ts +12 -0
  137. package/interfaces/enums.js +13 -0
  138. package/interfaces/enums.js.map +1 -1
  139. package/model.d.ts +17 -10
  140. package/model.js +60 -31
  141. package/model.js.map +1 -1
  142. package/package.json +1 -1
  143. package/services/essentials/dom-utils.js +19 -3
  144. package/services/essentials/dom-utils.js.map +1 -1
  145. package/services/scales-cartesian.d.ts +27 -9
  146. package/services/scales-cartesian.js +130 -52
  147. package/services/scales-cartesian.js.map +1 -1
  148. package/tools.d.ts +2 -0
  149. package/tools.js +4 -2
  150. package/tools.js.map +1 -1
  151. package/tsconfig.tsbuildinfo +125 -100
  152. package/components/axes/ruler-stacked-bar.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"grid.js","sourceRoot":"","sources":["grid.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,aAAa;AACb,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE/C;IAA0B,wBAAS;IAAnC;QAAA,qEA2OC;QA1OA,UAAI,GAAG,MAAM,CAAC;;IA0Of,CAAC;IAtOA,qBAAM,GAAN,UAAO,OAAc;QAAd,wBAAA,EAAA,cAAc;QACpB,IAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CACvC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EACvB,MAAM,EACN,GAAG,EACH,SAAS,CACT,CAAC;QACF,IAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CACvC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EACvB,MAAM,EACN,GAAG,EACH,SAAS,CACT,CAAC;QAEF,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,EAAE;YACvC,OAAO;SACP;QACD,oBAAoB;QACpB,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;QAElD,IAAI,cAAc,EAAE;YACnB,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACnD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;SACxB;QAED,IAAI,cAAc,EAAE;YACnB,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACnD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;SACxB;IACF,CAAC;IAED,wBAAS,GAAT,UAAU,OAAgB;QACzB,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QAExB,IAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE5C,IAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;QACjE,IAAM,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC;aAClC,aAAa,CAAC,CAAC,MAAM,CAAC;aACtB,aAAa,CAAC,CAAC,CAAC,CAAC;QAEnB,4BAA4B;QAC5B,IAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CACtC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EACvB,MAAM,EACN,GAAG,EACH,eAAe,CACf,CAAC;QACF,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAE3B,IAAM,CAAC,GAAG,GAAG;aACX,MAAM,CAAC,SAAS,CAAC;aACjB,IAAI,CACJ,WAAW,EACX,eAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,UAAK,MAAM,MAAG,CACnD,CAAC;QAEH,IAAI,OAAO,EAAE;YACZ,IAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CACzD,aAAa,CACb,CAAC;YACF,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACrC;aAAM;YACN,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACd;QAED,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,wBAAS,GAAT,UAAU,OAAgB;QACzB,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE1C,IAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;QACjE,IAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC;aAChC,aAAa,CAAC,CAAC,KAAK,CAAC;aACrB,aAAa,CAAC,CAAC,CAAC,CAAC;QAEnB,4BAA4B;QAC5B,IAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CACtC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EACvB,MAAM,EACN,GAAG,EACH,eAAe,CACf,CAAC;QACF,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAE3B,IAAM,CAAC,GAAG,GAAG;aACX,MAAM,CAAC,SAAS,CAAC;aACjB,IAAI,CAAC,WAAW,EAAE,kBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAG,CAAC,CAAC;QAEjE,IAAI,OAAO,EAAE;YACZ,IAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CACzD,aAAa,CACb,CAAC;YACF,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACrC;aAAM;YACN,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACd;QAED,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED;;;OAGG;IACH,mCAAoB,GAApB,UAAqB,QAAQ;QAC5B,iFAAiF;QACjF,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QAExB,8CAA8C;QAC9C,IAAM,UAAU,GAAG,GAAG;aACpB,SAAS,CAAC,eAAe,CAAC;aAC1B,KAAK,EAAE;aACP,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC;YACV,OAAO,CACN,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CACxC,CAAC;QACH,CAAC,CAAC,CAAC;QAEJ,mDAAmD;QACnD,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;QACf,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YACvB,OAAO;SACP;QAED,UAAU,CAAC,OAAO,CAAC,UAAC,IAAiB,EAAE,CAAM;YAC5C,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE;gBACxD,KAAK,EAAE,CAAC;aACR;QACF,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,KAAK,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;QAExE,yCAAyC;QACzC,IAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAChC,IAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,WAAW,CAAC;QAEhB,wFAAwF;QACxF,yEAAyE;QACzE,IAAI,CAAC,KAAK,EAAE;YACX,uDAAuD;YACvD,WAAW,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;SACpD;aAAM,IAAI,CAAC,KAAK,EAAE;YAClB,yEAAyE;YACzE,IAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,IAAI,EAAE,CAAC;YAClE,IAAM,KAAK,GAAG,QAAQ,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;YAE5D,WAAW,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;SAC5D;aAAM;YACN,iCAAiC;YACjC,WAAW;gBACV,CAAC,KAAK,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAE;oBACrC,CAAC,KAAK,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;SACvC;QACO,IAAA,8DAAS,CAA8C;QAC/D,uBAAuB;QACvB,OAAO,WAAW,GAAG,SAAS,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,gCAAiB,GAAjB,UAAkB,QAAQ;QACzB,IAAM,sBAAsB,GAAG,KAAK,CAAC,WAAW,CAC/C,IAAI,CAAC,KAAK,CAAC,UAAU,EACrB,SAAS,EACT,UAAU,EACV,WAAW,CACX,CAAC;QACF,IAAM,SAAS,GAAG,sBAAsB;YACvC,CAAC,CAAC,sBAAsB;YACxB,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QAExB,IAAM,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC;YACxD,IAAM,YAAY,GAAG,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAEtD,mDAAmD;YACnD,IAAM,MAAM,GAAG;gBACd,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,SAAS;gBACxC,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,SAAS;aACxC,CAAC;YAEF,OAAO,MAAM,CAAC,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACnB,CAAC;IAED,2BAAY,GAAZ,UAAa,cAAc,EAAE,cAAc;QAC1C,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QAExB,IAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;QACjE,IAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;QAE3D,IAAA,uBAA6C,EAA5C,mBAAW,EAAE,iBAA+B,CAAC;QAC9C,IAAA,uBAA6C,EAA5C,iBAAS,EAAE,mBAAiC,CAAC;QAEpD,2BAA2B;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC;QACxE,IAAM,YAAY,GAAG,QAAQ,CAAC,cAAc,CAC3C,IAAI,CAAC,QAAQ,EACb,cAAc,IAAI,cAAc;YAC/B,CAAC,CAAC,kCAAkC;YACpC,CAAC,CAAC,0BAA0B,CAC7B,CAAC;QAEF,IAAI,CAAC,QAAQ;aACX,KAAK,CAAC,YAAY,CAAC;aACnB,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;aACvC,KAAK,EAAE,CAAC;QAEV,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;IAED,wBAAS,GAAT,UAAU,CAAC;QACV,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAExC,wBAAwB;QACxB,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7B,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC;IAC9B,CAAC;IACF,WAAC;AAAD,CAAC,AA3OD,CAA0B,SAAS,GA2OlC","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { Tools } from \"../../tools\";\nimport { DOMUtils } from \"../../services\";\n\n// D3 Imports\nimport { axisBottom, axisLeft } from \"d3-axis\";\n\nexport class Grid extends Component {\n\ttype = \"grid\";\n\n\tbackdrop: any;\n\n\trender(animate = true) {\n\t\tconst isXGridEnabled = Tools.getProperty(\n\t\t\tthis.model.getOptions(),\n\t\t\t\"grid\",\n\t\t\t\"x\",\n\t\t\t\"enabled\"\n\t\t);\n\t\tconst isYGridEnabled = Tools.getProperty(\n\t\t\tthis.model.getOptions(),\n\t\t\t\"grid\",\n\t\t\t\"y\",\n\t\t\t\"enabled\"\n\t\t);\n\n\t\tif (!isXGridEnabled && !isYGridEnabled) {\n\t\t\treturn;\n\t\t}\n\t\t// Draw the backdrop\n\t\tthis.drawBackdrop(isXGridEnabled, isYGridEnabled);\n\n\t\tif (isXGridEnabled) {\n\t\t\tDOMUtils.appendOrSelect(this.backdrop, \"g.x.grid\");\n\t\t\tthis.drawXGrid(animate);\n\t\t}\n\n\t\tif (isYGridEnabled) {\n\t\t\tDOMUtils.appendOrSelect(this.backdrop, \"g.y.grid\");\n\t\t\tthis.drawYGrid(animate);\n\t\t}\n\t}\n\n\tdrawXGrid(animate: boolean) {\n\t\tconst svg = this.parent;\n\n\t\tconst height = this.backdrop.attr(\"height\");\n\n\t\tconst mainXScale = this.services.cartesianScales.getMainXScale();\n\t\tconst xGrid = axisBottom(mainXScale)\n\t\t\t.tickSizeInner(-height)\n\t\t\t.tickSizeOuter(0);\n\n\t\t// Determine number of ticks\n\t\tconst numberOfTicks = Tools.getProperty(\n\t\t\tthis.model.getOptions(),\n\t\t\t\"grid\",\n\t\t\t\"x\",\n\t\t\t\"numberOfTicks\"\n\t\t);\n\t\txGrid.ticks(numberOfTicks);\n\n\t\tconst g = svg\n\t\t\t.select(\".x.grid\")\n\t\t\t.attr(\n\t\t\t\t\"transform\",\n\t\t\t\t`translate(${-this.backdrop.attr(\"x\")}, ${height})`\n\t\t\t);\n\n\t\tif (animate) {\n\t\t\tconst transition = this.services.transitions.getTransition(\n\t\t\t\t\"grid-update\"\n\t\t\t);\n\t\t\tg.transition(transition).call(xGrid);\n\t\t} else {\n\t\t\tg.call(xGrid);\n\t\t}\n\n\t\tthis.cleanGrid(g);\n\t}\n\n\tdrawYGrid(animate: boolean) {\n\t\tconst svg = this.parent;\n\t\tconst width = this.backdrop.attr(\"width\");\n\n\t\tconst mainYScale = this.services.cartesianScales.getMainYScale();\n\t\tconst yGrid = axisLeft(mainYScale)\n\t\t\t.tickSizeInner(-width)\n\t\t\t.tickSizeOuter(0);\n\n\t\t// Determine number of ticks\n\t\tconst numberOfTicks = Tools.getProperty(\n\t\t\tthis.model.getOptions(),\n\t\t\t\"grid\",\n\t\t\t\"y\",\n\t\t\t\"numberOfTicks\"\n\t\t);\n\t\tyGrid.ticks(numberOfTicks);\n\n\t\tconst g = svg\n\t\t\t.select(\".y.grid\")\n\t\t\t.attr(\"transform\", `translate(0, ${-this.backdrop.attr(\"y\")})`);\n\n\t\tif (animate) {\n\t\t\tconst transition = this.services.transitions.getTransition(\n\t\t\t\t\"grid-update\"\n\t\t\t);\n\t\t\tg.transition(transition).call(yGrid);\n\t\t} else {\n\t\t\tg.call(yGrid);\n\t\t}\n\n\t\tthis.cleanGrid(g);\n\t}\n\n\t/**\n\t * Returns the threshold for the gridline tooltips based on the mouse location.\n\t * Calculated based on the mouse position between the two closest gridlines or edges of chart.\n\t */\n\tgetGridlineThreshold(mousePos) {\n\t\t// use the space between axis grid ticks to adjust the threshold for the tooltips\n\t\tconst svg = this.parent;\n\n\t\t// sort in ascending x translation value order\n\t\tconst gridlinesX = svg\n\t\t\t.selectAll(\".x.grid .tick\")\n\t\t\t.nodes()\n\t\t\t.sort((a, b) => {\n\t\t\t\treturn (\n\t\t\t\t\tNumber(Tools.getTranslationValues(a).tx) -\n\t\t\t\t\tNumber(Tools.getTranslationValues(b).tx)\n\t\t\t\t);\n\t\t\t});\n\n\t\t// find the 2 gridlines on either side of the mouse\n\t\tlet floor = -1;\n\t\tlet ceiling;\n\t\tif (!gridlinesX.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tgridlinesX.forEach((line: HTMLElement, i: any) => {\n\t\t\tif (mousePos[0] >= +Tools.getTranslationValues(line).tx) {\n\t\t\t\tfloor++;\n\t\t\t}\n\t\t});\n\t\tceiling = floor + 1 < gridlinesX.length ? floor + 1 : gridlinesX.length;\n\n\t\t// get the 'step' between chart gridlines\n\t\tconst line1 = gridlinesX[floor];\n\t\tconst line2 = gridlinesX[ceiling];\n\t\tlet lineSpacing;\n\n\t\t// if the mouse is on edge of charts (mouseX < first gridline || mouseX > last gridline)\n\t\t// we can use the chart edge to determind the threshold for the gridlines\n\t\tif (!line1) {\n\t\t\t// we are between the first gridline and the chart edge\n\t\t\tlineSpacing = +Tools.getTranslationValues(line2).tx;\n\t\t} else if (!line2) {\n\t\t\t// we need to use the chart right bounds in case there isnt a domain axis\n\t\t\tconst gridElement = svg.select(\"rect.chart-grid-backdrop\").node();\n\t\t\tconst width = DOMUtils.getSVGElementSize(gridElement).width;\n\n\t\t\tlineSpacing = width - +Tools.getTranslationValues(line1).tx;\n\t\t} else {\n\t\t\t// there are two gridlines to use\n\t\t\tlineSpacing =\n\t\t\t\t+Tools.getTranslationValues(line2).tx -\n\t\t\t\t+Tools.getTranslationValues(line1).tx;\n\t\t}\n\t\tconst { threshold } = this.model.getOptions().tooltip.gridline;\n\t\t// return the threshold\n\t\treturn lineSpacing * threshold;\n\t}\n\n\t/**\n\t * Returns the active gridlines based on the gridline threshold and mouse position.\n\t * @param position mouse positon\n\t */\n\tgetActiveGridline(position) {\n\t\tconst userSpecifiedThreshold = Tools.getProperty(\n\t\t\tthis.model.getOptions,\n\t\t\t\"tooltip\",\n\t\t\t\"gridline\",\n\t\t\t\"threshold\"\n\t\t);\n\t\tconst threshold = userSpecifiedThreshold\n\t\t\t? userSpecifiedThreshold\n\t\t\t: this.getGridlineThreshold(position);\n\t\tconst svg = this.parent;\n\n\t\tconst xGridlines = svg.selectAll(\".x.grid .tick\").filter(function () {\n\t\t\tconst translations = Tools.getTranslationValues(this);\n\n\t\t\t// threshold for when to display a gridline tooltip\n\t\t\tconst bounds = {\n\t\t\t\tmin: Number(translations.tx) - threshold,\n\t\t\t\tmax: Number(translations.tx) + threshold\n\t\t\t};\n\n\t\t\treturn bounds.min <= position[0] && position[0] <= bounds.max;\n\t\t});\n\n\t\treturn xGridlines;\n\t}\n\n\tdrawBackdrop(isXGridEnabled, isYGridEnabled) {\n\t\tconst svg = this.parent;\n\n\t\tconst mainXScale = this.services.cartesianScales.getMainXScale();\n\t\tconst mainYScale = this.services.cartesianScales.getMainYScale();\n\n\t\tconst [xScaleStart, xScaleEnd] = mainXScale.range();\n\t\tconst [yScaleEnd, yScaleStart] = mainYScale.range();\n\n\t\t// Get height from the grid\n\t\tthis.backdrop = DOMUtils.appendOrSelect(svg, \"svg.chart-grid-backdrop\");\n\t\tconst backdropRect = DOMUtils.appendOrSelect(\n\t\t\tthis.backdrop,\n\t\t\tisXGridEnabled || isYGridEnabled\n\t\t\t\t? \"rect.chart-grid-backdrop.stroked\"\n\t\t\t\t: \"rect.chart-grid-backdrop\"\n\t\t);\n\n\t\tthis.backdrop\n\t\t\t.merge(backdropRect)\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\t\t\t.lower();\n\n\t\tbackdropRect.attr(\"width\", \"100%\").attr(\"height\", \"100%\");\n\t}\n\n\tcleanGrid(g) {\n\t\tconst options = this.model.getOptions();\n\n\t\t// Remove extra elements\n\t\tg.selectAll(\"text\").remove();\n\t\tg.select(\".domain\").remove();\n\t}\n}\n"]}
1
+ {"version":3,"file":"grid.js","sourceRoot":"","sources":["grid.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { Tools } from \"../../tools\";\nimport { DOMUtils } from \"../../services\";\n\n// D3 Imports\nimport { axisBottom, axisLeft } from \"d3-axis\";\n\nexport class Grid extends Component {\n\ttype = \"grid\";\n\n\tbackdrop: any;\n\n\trender(animate = true) {\n\t\tconst isXGridEnabled = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t\"grid\",\n\t\t\t\"x\",\n\t\t\t\"enabled\"\n\t\t);\n\t\tconst isYGridEnabled = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t\"grid\",\n\t\t\t\"y\",\n\t\t\t\"enabled\"\n\t\t);\n\n\t\tif (!isXGridEnabled && !isYGridEnabled) {\n\t\t\treturn;\n\t\t}\n\t\t// Draw the backdrop\n\t\tthis.drawBackdrop(isXGridEnabled, isYGridEnabled);\n\n\t\tif (isXGridEnabled) {\n\t\t\tDOMUtils.appendOrSelect(this.backdrop, \"g.x.grid\");\n\t\t\tthis.drawXGrid(animate);\n\t\t}\n\n\t\tif (isYGridEnabled) {\n\t\t\tDOMUtils.appendOrSelect(this.backdrop, \"g.y.grid\");\n\t\t\tthis.drawYGrid(animate);\n\t\t}\n\t}\n\n\tdrawXGrid(animate: boolean) {\n\t\tconst svg = this.parent;\n\n\t\tconst height = this.backdrop.attr(\"height\");\n\n\t\tconst mainXScale = this.services.cartesianScales.getMainXScale();\n\t\tconst xGrid = axisBottom(mainXScale)\n\t\t\t.tickSizeInner(-height)\n\t\t\t.tickSizeOuter(0);\n\n\t\t// Determine number of ticks\n\t\tconst numberOfTicks = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t\"grid\",\n\t\t\t\"x\",\n\t\t\t\"numberOfTicks\"\n\t\t);\n\t\txGrid.ticks(numberOfTicks);\n\n\t\tconst g = svg\n\t\t\t.select(\".x.grid\")\n\t\t\t.attr(\n\t\t\t\t\"transform\",\n\t\t\t\t`translate(${-this.backdrop.attr(\"x\")}, ${height})`\n\t\t\t);\n\n\t\tif (animate) {\n\t\t\tconst transition = this.services.transitions.getTransition(\n\t\t\t\t\"grid-update\"\n\t\t\t);\n\t\t\tg.transition(transition).call(xGrid);\n\t\t} else {\n\t\t\tg.call(xGrid);\n\t\t}\n\n\t\tthis.cleanGrid(g);\n\t}\n\n\tdrawYGrid(animate: boolean) {\n\t\tconst svg = this.parent;\n\t\tconst width = this.backdrop.attr(\"width\");\n\n\t\tconst mainYScale = this.services.cartesianScales.getMainYScale();\n\t\tconst yGrid = axisLeft(mainYScale)\n\t\t\t.tickSizeInner(-width)\n\t\t\t.tickSizeOuter(0);\n\n\t\t// Determine number of ticks\n\t\tconst numberOfTicks = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t\"grid\",\n\t\t\t\"y\",\n\t\t\t\"numberOfTicks\"\n\t\t);\n\t\tyGrid.ticks(numberOfTicks);\n\n\t\tconst g = svg\n\t\t\t.select(\".y.grid\")\n\t\t\t.attr(\"transform\", `translate(0, ${-this.backdrop.attr(\"y\")})`);\n\n\t\tif (animate) {\n\t\t\tconst transition = this.services.transitions.getTransition(\n\t\t\t\t\"grid-update\"\n\t\t\t);\n\t\t\tg.transition(transition).call(yGrid);\n\t\t} else {\n\t\t\tg.call(yGrid);\n\t\t}\n\n\t\tthis.cleanGrid(g);\n\t}\n\n\t/**\n\t * Returns the threshold for the gridline tooltips based on the mouse location.\n\t * Calculated based on the mouse position between the two closest gridlines or edges of chart.\n\t */\n\tgetGridlineThreshold(mousePos) {\n\t\t// use the space between axis grid ticks to adjust the threshold for the tooltips\n\t\tconst svg = this.parent;\n\n\t\t// sort in ascending x translation value order\n\t\tconst gridlinesX = svg\n\t\t\t.selectAll(\".x.grid .tick\")\n\t\t\t.nodes()\n\t\t\t.sort((a, b) => {\n\t\t\t\treturn (\n\t\t\t\t\tNumber(Tools.getTranslationValues(a).tx) -\n\t\t\t\t\tNumber(Tools.getTranslationValues(b).tx)\n\t\t\t\t);\n\t\t\t});\n\n\t\t// find the 2 gridlines on either side of the mouse\n\t\tlet floor = -1;\n\t\tlet ceiling;\n\t\tif (!gridlinesX.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tgridlinesX.forEach((line: HTMLElement, i: any) => {\n\t\t\tif (mousePos[0] >= +Tools.getTranslationValues(line).tx) {\n\t\t\t\tfloor++;\n\t\t\t}\n\t\t});\n\t\tceiling = floor + 1 < gridlinesX.length ? floor + 1 : gridlinesX.length;\n\n\t\t// get the 'step' between chart gridlines\n\t\tconst line1 = gridlinesX[floor];\n\t\tconst line2 = gridlinesX[ceiling];\n\t\tlet lineSpacing;\n\n\t\t// if the mouse is on edge of charts (mouseX < first gridline || mouseX > last gridline)\n\t\t// we can use the chart edge to determind the threshold for the gridlines\n\t\tif (!line1) {\n\t\t\t// we are between the first gridline and the chart edge\n\t\t\tlineSpacing = +Tools.getTranslationValues(line2).tx;\n\t\t} else if (!line2) {\n\t\t\t// we need to use the chart right bounds in case there isnt a domain axis\n\t\t\tconst gridElement = svg.select(\"rect.chart-grid-backdrop\").node();\n\t\t\tconst width = DOMUtils.getSVGElementSize(gridElement).width;\n\n\t\t\tlineSpacing = width - +Tools.getTranslationValues(line1).tx;\n\t\t} else {\n\t\t\t// there are two gridlines to use\n\t\t\tlineSpacing =\n\t\t\t\t+Tools.getTranslationValues(line2).tx -\n\t\t\t\t+Tools.getTranslationValues(line1).tx;\n\t\t}\n\t\tconst { threshold } = this.getOptions().tooltip.gridline;\n\t\t// return the threshold\n\t\treturn lineSpacing * threshold;\n\t}\n\n\t/**\n\t * Returns the active gridlines based on the gridline threshold and mouse position.\n\t * @param position mouse positon\n\t */\n\tgetActiveGridline(position) {\n\t\tconst userSpecifiedThreshold = Tools.getProperty(\n\t\t\tthis.getOptions,\n\t\t\t\"tooltip\",\n\t\t\t\"gridline\",\n\t\t\t\"threshold\"\n\t\t);\n\t\tconst threshold = userSpecifiedThreshold\n\t\t\t? userSpecifiedThreshold\n\t\t\t: this.getGridlineThreshold(position);\n\t\tconst svg = this.parent;\n\n\t\tconst xGridlines = svg.selectAll(\".x.grid .tick\").filter(function () {\n\t\t\tconst translations = Tools.getTranslationValues(this);\n\n\t\t\t// threshold for when to display a gridline tooltip\n\t\t\tconst bounds = {\n\t\t\t\tmin: Number(translations.tx) - threshold,\n\t\t\t\tmax: Number(translations.tx) + threshold\n\t\t\t};\n\n\t\t\treturn bounds.min <= position[0] && position[0] <= bounds.max;\n\t\t});\n\n\t\treturn xGridlines;\n\t}\n\n\tdrawBackdrop(isXGridEnabled, isYGridEnabled) {\n\t\tconst svg = this.parent;\n\n\t\tconst mainXScale = this.services.cartesianScales.getMainXScale();\n\t\tconst mainYScale = this.services.cartesianScales.getMainYScale();\n\n\t\tconst [xScaleStart, xScaleEnd] = mainXScale.range();\n\t\tconst [yScaleEnd, yScaleStart] = mainYScale.range();\n\n\t\t// Get height from the grid\n\t\tthis.backdrop = DOMUtils.appendOrSelect(svg, \"svg.chart-grid-backdrop\");\n\t\tconst backdropRect = DOMUtils.appendOrSelect(\n\t\t\tthis.backdrop,\n\t\t\tisXGridEnabled || isYGridEnabled\n\t\t\t\t? \"rect.chart-grid-backdrop.stroked\"\n\t\t\t\t: \"rect.chart-grid-backdrop\"\n\t\t);\n\n\t\tthis.backdrop\n\t\t\t.merge(backdropRect)\n\t\t\t.attr(\"x\", xScaleStart)\n\t\t\t.attr(\"y\", yScaleStart)\n\t\t\t.attr(\"width\", Math.abs(xScaleEnd - xScaleStart))\n\t\t\t.attr(\"height\", Math.abs(yScaleEnd - yScaleStart))\n\t\t\t.lower();\n\n\t\tbackdropRect.attr(\"width\", \"100%\").attr(\"height\", \"100%\");\n\t}\n\n\tcleanGrid(g) {\n\t\t// Remove extra elements\n\t\tg.selectAll(\"text\").remove();\n\t\tg.select(\".domain\").remove();\n\t}\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { Ruler } from "./ruler";
2
- export declare class StackedBarRuler extends Ruler {
2
+ export declare class StackedRuler extends Ruler {
3
3
  formatTooltipData(tooltipData: any): any;
4
4
  hideRuler(): void;
5
5
  }
@@ -14,21 +14,21 @@ var __extends = (this && this.__extends) || (function () {
14
14
  import { DOMUtils } from "../../services";
15
15
  import { Events } from "../../interfaces";
16
16
  import { Ruler } from "./ruler";
17
- var StackedBarRuler = /** @class */ (function (_super) {
18
- __extends(StackedBarRuler, _super);
19
- function StackedBarRuler() {
17
+ var StackedRuler = /** @class */ (function (_super) {
18
+ __extends(StackedRuler, _super);
19
+ function StackedRuler() {
20
20
  return _super !== null && _super.apply(this, arguments) || this;
21
21
  }
22
- StackedBarRuler.prototype.formatTooltipData = function (tooltipData) {
22
+ StackedRuler.prototype.formatTooltipData = function (tooltipData) {
23
23
  return tooltipData.reverse();
24
24
  };
25
- StackedBarRuler.prototype.hideRuler = function () {
25
+ StackedRuler.prototype.hideRuler = function () {
26
26
  var svg = this.parent;
27
27
  var ruler = DOMUtils.appendOrSelect(svg, "g.ruler");
28
28
  this.services.events.dispatchEvent(Events.Tooltip.HIDE);
29
29
  ruler.attr("opacity", 0);
30
30
  };
31
- return StackedBarRuler;
31
+ return StackedRuler;
32
32
  }(Ruler));
33
- export { StackedBarRuler };
34
- //# sourceMappingURL=../../../src/components/axes/ruler-stacked-bar.js.map
33
+ export { StackedRuler };
34
+ //# sourceMappingURL=../../../src/components/axes/ruler-stacked.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruler-stacked.js","sourceRoot":"","sources":["ruler-stacked.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC;IAAkC,gCAAK;IAAvC;;IAYA,CAAC;IAXA,wCAAiB,GAAjB,UAAkB,WAAW;QAC5B,OAAO,WAAW,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED,gCAAS,GAAT;QACC,IAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,IAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAEtD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC1B,CAAC;IACF,mBAAC;AAAD,CAAC,AAZD,CAAkC,KAAK,GAYtC","sourcesContent":["import { DOMUtils } from \"../../services\";\nimport { Events } from \"../../interfaces\";\n\nimport { Ruler } from \"./ruler\";\n\nexport class StackedRuler extends Ruler {\n\tformatTooltipData(tooltipData) {\n\t\treturn tooltipData.reverse();\n\t}\n\n\thideRuler() {\n\t\tconst svg = this.parent;\n\t\tconst ruler = DOMUtils.appendOrSelect(svg, \"g.ruler\");\n\n\t\tthis.services.events.dispatchEvent(Events.Tooltip.HIDE);\n\t\truler.attr(\"opacity\", 0);\n\t}\n}\n"]}
@@ -28,14 +28,14 @@ var Ruler = /** @class */ (function (_super) {
28
28
  function Ruler() {
29
29
  var _this = _super !== null && _super.apply(this, arguments) || this;
30
30
  _this.type = "ruler";
31
- _this.isXGridEnabled = Tools.getProperty(_this.model.getOptions(), "grid", "x", "enabled");
32
- _this.isYGridEnabled = Tools.getProperty(_this.model.getOptions(), "grid", "y", "enabled");
31
+ _this.isXGridEnabled = Tools.getProperty(_this.getOptions(), "grid", "x", "enabled");
32
+ _this.isYGridEnabled = Tools.getProperty(_this.getOptions(), "grid", "y", "enabled");
33
33
  // flag for checking whether ruler event listener is added or not
34
34
  _this.isEventListenerAdded = false;
35
35
  return _this;
36
36
  }
37
37
  Ruler.prototype.render = function () {
38
- var isRulerEnabled = Tools.getProperty(this.model.getOptions(), "ruler", "enabled");
38
+ var isRulerEnabled = Tools.getProperty(this.getOptions(), "ruler", "enabled");
39
39
  this.drawBackdrop();
40
40
  if (isRulerEnabled && !this.isEventListenerAdded) {
41
41
  this.addBackdropEventListeners();
@@ -110,11 +110,11 @@ var Ruler = /** @class */ (function (_super) {
110
110
  }, []);
111
111
  // some data point match
112
112
  if (dataPointsMatchingRulerLine.length > 0) {
113
- var rangeIdentifier_1 = this.services.cartesianScales.getRangeIdentifier();
114
113
  var tooltipData = dataPointsMatchingRulerLine
115
114
  .map(function (d) { return d.originalData; })
116
115
  .filter(function (d) {
117
- var value = d[rangeIdentifier_1];
116
+ var rangeIdentifier = _this.services.cartesianScales.getRangeIdentifier(d);
117
+ var value = d[rangeIdentifier];
118
118
  return value !== null && value !== undefined;
119
119
  });
120
120
  // get elements on which we should trigger mouse events
@@ -1 +1 @@
1
- {"version":3,"file":"ruler.js","sourceRoot":"","sources":["ruler.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { DOMUtils } from \"../../services\";\nimport { CartesianOrientations, Events } from \"../../interfaces\";\nimport { Tools } from \"../../tools\";\n\n// D3 Imports\nimport { Selection, mouse } from \"d3-selection\";\n\ntype GenericSvgSelection = Selection<SVGElement, any, SVGElement, any>;\n\nconst THRESHOLD = 5;\n\n/** check if x is inside threshold area extents */\nfunction pointIsWithinThreshold(dx: number, x: number) {\n\treturn dx > x - THRESHOLD && dx < x + THRESHOLD;\n}\n\nexport class Ruler extends Component {\n\ttype = \"ruler\";\n\tbackdrop: GenericSvgSelection;\n\telementsToHighlight: GenericSvgSelection;\n\tpointsWithinLine: {\n\t\tdomainValue: number;\n\t\toriginalData: any;\n\t}[];\n\tisXGridEnabled = Tools.getProperty(\n\t\tthis.model.getOptions(),\n\t\t\"grid\",\n\t\t\"x\",\n\t\t\"enabled\"\n\t);\n\tisYGridEnabled = Tools.getProperty(\n\t\tthis.model.getOptions(),\n\t\t\"grid\",\n\t\t\"y\",\n\t\t\"enabled\"\n\t);\n\t// flag for checking whether ruler event listener is added or not\n\tisEventListenerAdded = false;\n\n\trender() {\n\t\tconst isRulerEnabled = Tools.getProperty(\n\t\t\tthis.model.getOptions(),\n\t\t\t\"ruler\",\n\t\t\t\"enabled\"\n\t\t);\n\n\t\tthis.drawBackdrop();\n\n\t\tif (isRulerEnabled && !this.isEventListenerAdded) {\n\t\t\tthis.addBackdropEventListeners();\n\t\t} else if (!isRulerEnabled && this.isEventListenerAdded) {\n\t\t\tthis.removeBackdropEventListeners();\n\t\t}\n\t}\n\n\tremoveBackdropEventListeners() {\n\t\tthis.isEventListenerAdded = false;\n\t\tthis.backdrop.on(\"mousemove mouseover mouseout\", null);\n\t}\n\n\tformatTooltipData(tooltipData) {\n\t\treturn tooltipData;\n\t}\n\n\tshowRuler([x, y]: [number, number]) {\n\t\tconst svg = this.parent;\n\t\tconst orientation: CartesianOrientations = this.services.cartesianScales.getOrientation();\n\t\tconst mouseCoordinate =\n\t\t\torientation === CartesianOrientations.HORIZONTAL ? y : x;\n\t\tconst ruler = DOMUtils.appendOrSelect(svg, \"g.ruler\").attr(\n\t\t\t\"aria-label\",\n\t\t\t\"ruler\"\n\t\t);\n\t\tconst rulerLine = DOMUtils.appendOrSelect(ruler, \"line.ruler-line\");\n\t\tconst dataPointElements: GenericSvgSelection = svg.selectAll(\n\t\t\t\"[role=graphics-symbol]\"\n\t\t);\n\t\tconst displayData = this.model.getDisplayData();\n\t\tconst rangeScale = this.services.cartesianScales.getRangeScale();\n\t\tconst [yScaleEnd, yScaleStart] = rangeScale.range();\n\n\t\tconst pointsWithinLine = displayData\n\t\t\t.map((d) => ({\n\t\t\t\tdomainValue: this.services.cartesianScales.getDomainValue(d),\n\t\t\t\toriginalData: d\n\t\t\t}))\n\t\t\t.filter((d) =>\n\t\t\t\tpointIsWithinThreshold(d.domainValue, mouseCoordinate)\n\t\t\t);\n\n\t\tif (\n\t\t\tthis.pointsWithinLine &&\n\t\t\tpointsWithinLine.length === this.pointsWithinLine.length &&\n\t\t\tpointsWithinLine.map((point) => point.domainValue).join() ===\n\t\t\t\tthis.pointsWithinLine.map((point) => point.domainValue).join()\n\t\t) {\n\t\t\tthis.pointsWithinLine = pointsWithinLine;\n\t\t\treturn this.services.events.dispatchEvent(Events.Tooltip.MOVE, {\n\t\t\t\tmousePosition: [x, y]\n\t\t\t});\n\t\t}\n\n\t\tthis.pointsWithinLine = pointsWithinLine;\n\n\t\t/**\n\t\t * Find matches, reduce is used instead of filter\n\t\t * to only get elements which belong to the same axis coordinate\n\t\t */\n\t\tconst dataPointsMatchingRulerLine: {\n\t\t\tdomainValue: number;\n\t\t\toriginalData: any;\n\t\t}[] = this.pointsWithinLine.reduce((accum, currentValue) => {\n\t\t\tif (accum.length === 0) {\n\t\t\t\taccum.push(currentValue);\n\t\t\t\treturn accum;\n\t\t\t}\n\n\t\t\t// store the first element of the accumulator array to compare it with current element being processed\n\t\t\tconst sampleAccumValue = accum[0].domainValue;\n\n\t\t\tconst distanceToCurrentValue = Math.abs(\n\t\t\t\tmouseCoordinate - currentValue.domainValue\n\t\t\t);\n\t\t\tconst distanceToAccumValue = Math.abs(\n\t\t\t\tmouseCoordinate - sampleAccumValue\n\t\t\t);\n\n\t\t\tif (distanceToCurrentValue > distanceToAccumValue) {\n\t\t\t\t// if distance with current value is bigger than already existing value in the accumulator, skip current iteration\n\t\t\t\treturn accum;\n\t\t\t} else if (distanceToCurrentValue < distanceToAccumValue) {\n\t\t\t\t// currentValue data point is closer to mouse inside the threshold area, so reinstantiate array\n\t\t\t\taccum = [currentValue];\n\t\t\t} else {\n\t\t\t\t// currentValue is equal to already stored values, which means there's another match on the same coordinate\n\t\t\t\taccum.push(currentValue);\n\t\t\t}\n\n\t\t\treturn accum;\n\t\t}, []);\n\n\t\t// some data point match\n\t\tif (dataPointsMatchingRulerLine.length > 0) {\n\t\t\tconst rangeIdentifier = this.services.cartesianScales.getRangeIdentifier();\n\t\t\tconst tooltipData = dataPointsMatchingRulerLine\n\t\t\t\t.map((d) => d.originalData)\n\t\t\t\t.filter((d) => {\n\t\t\t\t\tconst value = d[rangeIdentifier];\n\t\t\t\t\treturn value !== null && value !== undefined;\n\t\t\t\t});\n\n\t\t\t// get elements on which we should trigger mouse events\n\t\t\tconst domainValuesMatchingRulerLine = dataPointsMatchingRulerLine.map(\n\t\t\t\t(d) => d.domainValue\n\t\t\t);\n\t\t\tconst elementsToHighlight = dataPointElements.filter((d) => {\n\t\t\t\tconst domainValue = this.services.cartesianScales.getDomainValue(\n\t\t\t\t\td\n\t\t\t\t);\n\t\t\t\treturn domainValuesMatchingRulerLine.includes(domainValue);\n\t\t\t});\n\n\t\t\t/** if we pass from a trigger area to another one\n\t\t\t * mouseout on previous elements won't get dispatched\n\t\t\t * so we need to do it manually\n\t\t\t */\n\t\t\tif (\n\t\t\t\tthis.elementsToHighlight &&\n\t\t\t\tthis.elementsToHighlight.size() > 0 &&\n\t\t\t\t!Tools.isEqual(this.elementsToHighlight, elementsToHighlight)\n\t\t\t) {\n\t\t\t\tthis.hideRuler();\n\t\t\t}\n\n\t\t\telementsToHighlight.dispatch(\"mouseover\");\n\n\t\t\t// set current hovered elements\n\t\t\tthis.elementsToHighlight = elementsToHighlight;\n\n\t\t\tthis.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\tmousePosition: [x, y],\n\t\t\t\thoveredElement: rulerLine,\n\t\t\t\tdata: this.formatTooltipData(tooltipData)\n\t\t\t});\n\n\t\t\truler.attr(\"opacity\", 1);\n\n\t\t\t// line snaps to matching point\n\t\t\tconst sampleMatch = dataPointsMatchingRulerLine[0];\n\t\t\tif (orientation === \"horizontal\") {\n\t\t\t\trulerLine\n\t\t\t\t\t.attr(\"x1\", yScaleStart)\n\t\t\t\t\t.attr(\"x2\", yScaleEnd)\n\t\t\t\t\t.attr(\"y1\", sampleMatch.domainValue)\n\t\t\t\t\t.attr(\"y2\", sampleMatch.domainValue);\n\t\t\t} else {\n\t\t\t\trulerLine\n\t\t\t\t\t.attr(\"y1\", yScaleStart)\n\t\t\t\t\t.attr(\"y2\", yScaleEnd)\n\t\t\t\t\t.attr(\"x1\", sampleMatch.domainValue)\n\t\t\t\t\t.attr(\"x2\", sampleMatch.domainValue);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.hideRuler();\n\t\t}\n\t}\n\n\thideRuler() {\n\t\tconst svg = this.parent;\n\t\tconst ruler = DOMUtils.appendOrSelect(svg, \"g.ruler\");\n\t\tconst dataPointElements = svg.selectAll(\"[role=graphics-symbol]\");\n\n\t\tdataPointElements.dispatch(\"mouseout\");\n\t\tthis.services.events.dispatchEvent(Events.Tooltip.HIDE);\n\t\truler.attr(\"opacity\", 0);\n\t}\n\n\t/**\n\t * Adds the listener on the X grid to trigger multiple point tooltips along the x axis.\n\t */\n\taddBackdropEventListeners() {\n\t\tthis.isEventListenerAdded = true;\n\t\tconst self = this;\n\t\tconst displayData = this.model.getDisplayData();\n\n\t\tlet mouseMoveCallback = function () {\n\t\t\tconst pos = mouse(self.parent.node());\n\t\t\tself.showRuler(pos);\n\t\t};\n\n\t\t// Debounce mouseMoveCallback if there are more than 100 datapoints\n\t\tif (displayData.length > 100) {\n\t\t\tconst debounceThreshold = (displayData.length % 50) * 12.5;\n\n\t\t\tmouseMoveCallback = Tools.debounceWithD3MousePosition(\n\t\t\t\tfunction () {\n\t\t\t\t\tconst { mousePosition } = this;\n\t\t\t\t\tself.showRuler(mousePosition);\n\t\t\t\t},\n\t\t\t\tdebounceThreshold,\n\t\t\t\tthis.parent.node()\n\t\t\t);\n\t\t}\n\n\t\tthis.backdrop\n\t\t\t.on(\"mousemove mouseover\", mouseMoveCallback)\n\t\t\t.on(\"mouseout\", this.hideRuler.bind(this));\n\t}\n\n\tdrawBackdrop() {\n\t\tconst svg = this.parent;\n\n\t\tconst mainXScale = this.services.cartesianScales.getMainXScale();\n\t\tconst mainYScale = this.services.cartesianScales.getMainYScale();\n\n\t\tconst [xScaleStart, xScaleEnd] = mainXScale.range();\n\t\tconst [yScaleEnd, yScaleStart] = mainYScale.range();\n\n\t\t// Get height from the grid\n\t\tthis.backdrop = DOMUtils.appendOrSelect(svg, \"svg.chart-grid-backdrop\");\n\t\tconst backdropRect = DOMUtils.appendOrSelect(\n\t\t\tthis.backdrop,\n\t\t\tthis.isXGridEnabled || this.isYGridEnabled\n\t\t\t\t? \"rect.chart-grid-backdrop.stroked\"\n\t\t\t\t: \"rect.chart-grid-backdrop\"\n\t\t);\n\t}\n}\n"]}
1
+ {"version":3,"file":"ruler.js","sourceRoot":"","sources":["ruler.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { DOMUtils } from \"../../services\";\nimport { CartesianOrientations, Events } from \"../../interfaces\";\nimport { Tools } from \"../../tools\";\n\n// D3 Imports\nimport { Selection, mouse } from \"d3-selection\";\n\ntype GenericSvgSelection = Selection<SVGElement, any, SVGElement, any>;\n\nconst THRESHOLD = 5;\n\n/** check if x is inside threshold area extents */\nfunction pointIsWithinThreshold(dx: number, x: number) {\n\treturn dx > x - THRESHOLD && dx < x + THRESHOLD;\n}\n\nexport class Ruler extends Component {\n\ttype = \"ruler\";\n\tbackdrop: GenericSvgSelection;\n\telementsToHighlight: GenericSvgSelection;\n\tpointsWithinLine: {\n\t\tdomainValue: number;\n\t\toriginalData: any;\n\t}[];\n\tisXGridEnabled = Tools.getProperty(\n\t\tthis.getOptions(),\n\t\t\"grid\",\n\t\t\"x\",\n\t\t\"enabled\"\n\t);\n\tisYGridEnabled = Tools.getProperty(\n\t\tthis.getOptions(),\n\t\t\"grid\",\n\t\t\"y\",\n\t\t\"enabled\"\n\t);\n\t// flag for checking whether ruler event listener is added or not\n\tisEventListenerAdded = false;\n\n\trender() {\n\t\tconst isRulerEnabled = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t\"ruler\",\n\t\t\t\"enabled\"\n\t\t);\n\n\t\tthis.drawBackdrop();\n\n\t\tif (isRulerEnabled && !this.isEventListenerAdded) {\n\t\t\tthis.addBackdropEventListeners();\n\t\t} else if (!isRulerEnabled && this.isEventListenerAdded) {\n\t\t\tthis.removeBackdropEventListeners();\n\t\t}\n\t}\n\n\tremoveBackdropEventListeners() {\n\t\tthis.isEventListenerAdded = false;\n\t\tthis.backdrop.on(\"mousemove mouseover mouseout\", null);\n\t}\n\n\tformatTooltipData(tooltipData) {\n\t\treturn tooltipData;\n\t}\n\n\tshowRuler([x, y]: [number, number]) {\n\t\tconst svg = this.parent;\n\t\tconst orientation: CartesianOrientations = this.services.cartesianScales.getOrientation();\n\t\tconst mouseCoordinate =\n\t\t\torientation === CartesianOrientations.HORIZONTAL ? y : x;\n\t\tconst ruler = DOMUtils.appendOrSelect(svg, \"g.ruler\").attr(\n\t\t\t\"aria-label\",\n\t\t\t\"ruler\"\n\t\t);\n\t\tconst rulerLine = DOMUtils.appendOrSelect(ruler, \"line.ruler-line\");\n\t\tconst dataPointElements: GenericSvgSelection = svg.selectAll(\n\t\t\t\"[role=graphics-symbol]\"\n\t\t);\n\t\tconst displayData = this.model.getDisplayData();\n\t\tconst rangeScale = this.services.cartesianScales.getRangeScale();\n\t\tconst [yScaleEnd, yScaleStart] = rangeScale.range();\n\n\t\tconst pointsWithinLine = displayData\n\t\t\t.map((d) => ({\n\t\t\t\tdomainValue: this.services.cartesianScales.getDomainValue(d),\n\t\t\t\toriginalData: d\n\t\t\t}))\n\t\t\t.filter((d) =>\n\t\t\t\tpointIsWithinThreshold(d.domainValue, mouseCoordinate)\n\t\t\t);\n\n\t\tif (\n\t\t\tthis.pointsWithinLine &&\n\t\t\tpointsWithinLine.length === this.pointsWithinLine.length &&\n\t\t\tpointsWithinLine.map((point) => point.domainValue).join() ===\n\t\t\t\tthis.pointsWithinLine.map((point) => point.domainValue).join()\n\t\t) {\n\t\t\tthis.pointsWithinLine = pointsWithinLine;\n\t\t\treturn this.services.events.dispatchEvent(Events.Tooltip.MOVE, {\n\t\t\t\tmousePosition: [x, y]\n\t\t\t});\n\t\t}\n\n\t\tthis.pointsWithinLine = pointsWithinLine;\n\n\t\t/**\n\t\t * Find matches, reduce is used instead of filter\n\t\t * to only get elements which belong to the same axis coordinate\n\t\t */\n\t\tconst dataPointsMatchingRulerLine: {\n\t\t\tdomainValue: number;\n\t\t\toriginalData: any;\n\t\t}[] = this.pointsWithinLine.reduce((accum, currentValue) => {\n\t\t\tif (accum.length === 0) {\n\t\t\t\taccum.push(currentValue);\n\t\t\t\treturn accum;\n\t\t\t}\n\n\t\t\t// store the first element of the accumulator array to compare it with current element being processed\n\t\t\tconst sampleAccumValue = accum[0].domainValue;\n\n\t\t\tconst distanceToCurrentValue = Math.abs(\n\t\t\t\tmouseCoordinate - currentValue.domainValue\n\t\t\t);\n\t\t\tconst distanceToAccumValue = Math.abs(\n\t\t\t\tmouseCoordinate - sampleAccumValue\n\t\t\t);\n\n\t\t\tif (distanceToCurrentValue > distanceToAccumValue) {\n\t\t\t\t// if distance with current value is bigger than already existing value in the accumulator, skip current iteration\n\t\t\t\treturn accum;\n\t\t\t} else if (distanceToCurrentValue < distanceToAccumValue) {\n\t\t\t\t// currentValue data point is closer to mouse inside the threshold area, so reinstantiate array\n\t\t\t\taccum = [currentValue];\n\t\t\t} else {\n\t\t\t\t// currentValue is equal to already stored values, which means there's another match on the same coordinate\n\t\t\t\taccum.push(currentValue);\n\t\t\t}\n\n\t\t\treturn accum;\n\t\t}, []);\n\n\t\t// some data point match\n\t\tif (dataPointsMatchingRulerLine.length > 0) {\n\t\t\tconst tooltipData = dataPointsMatchingRulerLine\n\t\t\t\t.map((d) => d.originalData)\n\t\t\t\t.filter((d) => {\n\t\t\t\t\tconst rangeIdentifier = this.services.cartesianScales.getRangeIdentifier(d);\n\t\t\t\t\tconst value = d[rangeIdentifier];\n\t\t\t\t\treturn value !== null && value !== undefined;\n\t\t\t\t});\n\n\t\t\t// get elements on which we should trigger mouse events\n\t\t\tconst domainValuesMatchingRulerLine = dataPointsMatchingRulerLine.map(\n\t\t\t\t(d) => d.domainValue\n\t\t\t);\n\t\t\tconst elementsToHighlight = dataPointElements.filter((d) => {\n\t\t\t\tconst domainValue = this.services.cartesianScales.getDomainValue(\n\t\t\t\t\td\n\t\t\t\t);\n\t\t\t\treturn domainValuesMatchingRulerLine.includes(domainValue);\n\t\t\t});\n\n\t\t\t/** if we pass from a trigger area to another one\n\t\t\t * mouseout on previous elements won't get dispatched\n\t\t\t * so we need to do it manually\n\t\t\t */\n\t\t\tif (\n\t\t\t\tthis.elementsToHighlight &&\n\t\t\t\tthis.elementsToHighlight.size() > 0 &&\n\t\t\t\t!Tools.isEqual(this.elementsToHighlight, elementsToHighlight)\n\t\t\t) {\n\t\t\t\tthis.hideRuler();\n\t\t\t}\n\n\t\t\telementsToHighlight.dispatch(\"mouseover\");\n\n\t\t\t// set current hovered elements\n\t\t\tthis.elementsToHighlight = elementsToHighlight;\n\n\t\t\tthis.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\tmousePosition: [x, y],\n\t\t\t\thoveredElement: rulerLine,\n\t\t\t\tdata: this.formatTooltipData(tooltipData)\n\t\t\t});\n\n\t\t\truler.attr(\"opacity\", 1);\n\n\t\t\t// line snaps to matching point\n\t\t\tconst sampleMatch = dataPointsMatchingRulerLine[0];\n\t\t\tif (orientation === \"horizontal\") {\n\t\t\t\trulerLine\n\t\t\t\t\t.attr(\"x1\", yScaleStart)\n\t\t\t\t\t.attr(\"x2\", yScaleEnd)\n\t\t\t\t\t.attr(\"y1\", sampleMatch.domainValue)\n\t\t\t\t\t.attr(\"y2\", sampleMatch.domainValue);\n\t\t\t} else {\n\t\t\t\trulerLine\n\t\t\t\t\t.attr(\"y1\", yScaleStart)\n\t\t\t\t\t.attr(\"y2\", yScaleEnd)\n\t\t\t\t\t.attr(\"x1\", sampleMatch.domainValue)\n\t\t\t\t\t.attr(\"x2\", sampleMatch.domainValue);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.hideRuler();\n\t\t}\n\t}\n\n\thideRuler() {\n\t\tconst svg = this.parent;\n\t\tconst ruler = DOMUtils.appendOrSelect(svg, \"g.ruler\");\n\t\tconst dataPointElements = svg.selectAll(\"[role=graphics-symbol]\");\n\n\t\tdataPointElements.dispatch(\"mouseout\");\n\t\tthis.services.events.dispatchEvent(Events.Tooltip.HIDE);\n\t\truler.attr(\"opacity\", 0);\n\t}\n\n\t/**\n\t * Adds the listener on the X grid to trigger multiple point tooltips along the x axis.\n\t */\n\taddBackdropEventListeners() {\n\t\tthis.isEventListenerAdded = true;\n\t\tconst self = this;\n\t\tconst displayData = this.model.getDisplayData();\n\n\t\tlet mouseMoveCallback = function () {\n\t\t\tconst pos = mouse(self.parent.node());\n\t\t\tself.showRuler(pos);\n\t\t};\n\n\t\t// Debounce mouseMoveCallback if there are more than 100 datapoints\n\t\tif (displayData.length > 100) {\n\t\t\tconst debounceThreshold = (displayData.length % 50) * 12.5;\n\n\t\t\tmouseMoveCallback = Tools.debounceWithD3MousePosition(\n\t\t\t\tfunction () {\n\t\t\t\t\tconst { mousePosition } = this;\n\t\t\t\t\tself.showRuler(mousePosition);\n\t\t\t\t},\n\t\t\t\tdebounceThreshold,\n\t\t\t\tthis.parent.node()\n\t\t\t);\n\t\t}\n\n\t\tthis.backdrop\n\t\t\t.on(\"mousemove mouseover\", mouseMoveCallback)\n\t\t\t.on(\"mouseout\", this.hideRuler.bind(this));\n\t}\n\n\tdrawBackdrop() {\n\t\tconst svg = this.parent;\n\n\t\tconst mainXScale = this.services.cartesianScales.getMainXScale();\n\t\tconst mainYScale = this.services.cartesianScales.getMainYScale();\n\n\t\tconst [xScaleStart, xScaleEnd] = mainXScale.range();\n\t\tconst [yScaleEnd, yScaleStart] = mainYScale.range();\n\n\t\t// Get height from the grid\n\t\tthis.backdrop = DOMUtils.appendOrSelect(svg, \"svg.chart-grid-backdrop\");\n\t\tconst backdropRect = DOMUtils.appendOrSelect(\n\t\t\tthis.backdrop,\n\t\t\tthis.isXGridEnabled || this.isYGridEnabled\n\t\t\t\t? \"rect.chart-grid-backdrop.stroked\"\n\t\t\t\t: \"rect.chart-grid-backdrop\"\n\t\t);\n\t}\n}\n"]}
@@ -36,7 +36,7 @@ var Toolbar = /** @class */ (function (_super) {
36
36
  }
37
37
  Toolbar.prototype.init = function () {
38
38
  var _this = this;
39
- var options = this.model.getOptions();
39
+ var options = this.getOptions();
40
40
  // Grab the tooltip element
41
41
  var holder = select(this.services.domUtils.getHolder());
42
42
  var chartPrefix = Tools.getProperty(options, "style", "prefix");
@@ -57,7 +57,7 @@ var Toolbar = /** @class */ (function (_super) {
57
57
  };
58
58
  Toolbar.prototype.render = function (animate) {
59
59
  if (animate === void 0) { animate = true; }
60
- var isDataLoading = Tools.getProperty(this.model.getOptions(), "data", "loading");
60
+ var isDataLoading = Tools.getProperty(this.getOptions(), "data", "loading");
61
61
  // size of toolbar button with background
62
62
  var buttonSize = Configuration.toolbar.buttonSize;
63
63
  var parentY = parseFloat(this.parent.node().getAttribute("y"));
@@ -277,8 +277,8 @@ var Toolbar = /** @class */ (function (_super) {
277
277
  };
278
278
  Toolbar.prototype.getControlConfigs = function () {
279
279
  var _this = this;
280
- var numberOfIcons = Tools.getProperty(this.model.getOptions(), "toolbar", "numberOfIcons");
281
- var controls = Tools.getProperty(this.model.getOptions(), "toolbar", "controls");
280
+ var numberOfIcons = Tools.getProperty(this.getOptions(), "toolbar", "numberOfIcons");
281
+ var controls = Tools.getProperty(this.getOptions(), "toolbar", "controls");
282
282
  var controlList = [];
283
283
  controls.forEach(function (control) {
284
284
  var controlConfig = _this.getControlConfigByType(control.type);
@@ -1 +1 @@
1
- {"version":3,"file":"toolbar.js","sourceRoot":"","sources":["toolbar.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { Events, Roles, ToolbarControlTypes } from \"../../interfaces\";\nimport { Tools } from \"../../tools\";\nimport { DOMUtils } from \"../../services\";\nimport * as Configuration from \"../../configuration\";\n\n// D3 Imports\nimport { event, select } from \"d3-selection\";\n\n// import the settings for the css prefix\nimport settings from \"carbon-components/es/globals/js/settings\";\n\nexport class Toolbar extends Component {\n\ttype = \"toolbar\";\n\n\t// overflow menu button to control background color\n\toverflowButton: any;\n\n\t// ul options list element\n\toverflowMenu: any;\n\n\t// x, y coordinate of overflow menu\n\toverflowMenuX = 0;\n\toverflowMenuY = 0;\n\n\t// Use a random number to create overflow menu item unique ID\n\t// so they don't interfere the other overflow menu item in a page\n\toverflowMenuItemId = Math.floor(Math.random() * 99999999999);\n\n\tinit() {\n\t\tconst options = this.model.getOptions();\n\n\t\t// Grab the tooltip element\n\t\tconst holder = select(this.services.domUtils.getHolder());\n\t\tconst chartPrefix = Tools.getProperty(options, \"style\", \"prefix\");\n\n\t\tthis.overflowMenu = DOMUtils.appendOrSelect(\n\t\t\tholder,\n\t\t\t`div.${settings.prefix}--${chartPrefix}--overflowMenu`\n\t\t);\n\n\t\tthis.overflowMenu.style(\"max-width\", null);\n\n\t\t// listen to show overflow menu event to render the overflow menu\n\t\tthis.services.events.addEventListener(\n\t\t\tEvents.Toolbar.SHOW_OVERFLOW_MENU,\n\t\t\t() => {\n\t\t\t\tthis.overflowMenu.html(this.getOverflowMenuHTML());\n\t\t\t}\n\t\t);\n\n\t\t// listen to hide overflow menu event to hide the overflow menu\n\t\tthis.services.events.addEventListener(\n\t\t\tEvents.Toolbar.HIDE_OVERFLOW_MENU,\n\t\t\t() => {\n\t\t\t\tthis.overflowMenu.html(null);\n\t\t\t}\n\t\t);\n\t\t// hide overflow menu if user clicks on somewhere in web page\n\t\tdocument.body.addEventListener(\"click\", () =>\n\t\t\tthis.updateOverflowMenu(false)\n\t\t);\n\t}\n\n\trender(animate = true) {\n\t\tconst isDataLoading = Tools.getProperty(\n\t\t\tthis.model.getOptions(),\n\t\t\t\"data\",\n\t\t\t\"loading\"\n\t\t);\n\n\t\t// size of toolbar button with background\n\t\tconst buttonSize = Configuration.toolbar.buttonSize;\n\t\tconst parentY = parseFloat(this.parent.node().getAttribute(\"y\"));\n\n\t\tconst svg = this.getContainerSVG();\n\n\t\t// TODO -- adjust toolbar Y position to align title component\n\t\t// before layout component supports vertical alignment center\n\t\tconst Y_OFFSET = -6;\n\t\tsvg.attr(\"transform\", `translate(0, ${parentY + Y_OFFSET})`);\n\n\t\tconst { width } = DOMUtils.getSVGElementSize(\n\t\t\tthis.services.domUtils.getMainSVG(),\n\t\t\t{\n\t\t\t\tuseAttrs: true\n\t\t\t}\n\t\t);\n\n\t\t// overflow menu width is 160px\n\t\t// it's set by Carbon component\n\t\tconst overflowMenuWidth = 160;\n\t\t// no good solution to get correct Toolbar position\n\t\t// parent x doesn't work well\n\t\t// assume the overflow icon has right alignment in layout\n\t\tthis.overflowMenuX = width - overflowMenuWidth;\n\t\tthis.overflowMenuY = parentY + Y_OFFSET + buttonSize;\n\t\tconst container = DOMUtils.appendOrSelect(svg, \"svg.toolbar-container\")\n\t\t\t.attr(\"width\", \"100%\")\n\t\t\t.attr(\"height\", Configuration.toolbar.height)\n\t\t\t.attr(\"opacity\", 1);\n\n\t\t// clean children first\n\t\tcontainer.html(null);\n\n\t\t// get the toolbar buttons\n\t\tconst { buttonList, overflowMenuItemList } = this.getControlConfigs();\n\n\t\t// overflow button is required only if overflow menu item list is valid\n\t\tif (!!overflowMenuItemList) {\n\t\t\tbuttonList.push(this.getOverflowButtonConfig());\n\t\t}\n\n\t\t// loading or empty state\n\t\tif (isDataLoading || buttonList.length === 0) {\n\t\t\t// put an empty rect to keep space unchanged\n\t\t\tDOMUtils.appendOrSelect(container, \"svg.toolbar-loading-spacer\")\n\t\t\t\t.append(\"rect\")\n\t\t\t\t.attr(\"height\", Configuration.toolbar.height)\n\t\t\t\t.attr(\"width\", buttonSize * 3) // value doesn't matter but can't be empty\n\t\t\t\t.attr(\"opacity\", 0);\n\t\t} else {\n\t\t\t// render toolbar buttons sequentially\n\t\t\tlet buttonXPosition = 0;\n\t\t\tbuttonList.forEach((button) => {\n\t\t\t\t// button container\n\t\t\t\tconst buttonContainer = DOMUtils.appendOrSelect(\n\t\t\t\t\tcontainer,\n\t\t\t\t\t`svg.${button.id}`\n\t\t\t\t).classed(\"toolbar-button\", true);\n\n\t\t\t\t// add button background rect\n\t\t\t\tconst buttonBackground = DOMUtils.appendOrSelect(\n\t\t\t\t\tbuttonContainer,\n\t\t\t\t\t\"rect.toolbar-button-background\"\n\t\t\t\t)\n\t\t\t\t\t.attr(\"x\", buttonXPosition)\n\t\t\t\t\t.attr(\"y\", 0)\n\t\t\t\t\t.attr(\"width\", buttonSize)\n\t\t\t\t\t.attr(\"height\", buttonSize);\n\n\t\t\t\tconst buttonIcon = DOMUtils.appendOrSelect(\n\t\t\t\t\tbuttonContainer,\n\t\t\t\t\t\"svg.toolbar-button-icon\"\n\t\t\t\t)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t\"x\",\n\t\t\t\t\t\tbuttonXPosition + Configuration.toolbar.iconPadding\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\"y\", Configuration.toolbar.iconPadding)\n\t\t\t\t\t.attr(\"width\", Configuration.toolbar.iconSize)\n\t\t\t\t\t.attr(\"height\", Configuration.toolbar.iconSize)\n\t\t\t\t\t.attr(\"viewBox\", \"0 0 32 32\")\n\t\t\t\t\t.attr(\"role\", Roles.IMG);\n\n\t\t\t\tbuttonIcon.html(button.iconSVGContent);\n\t\t\t\tif (button.shouldBeDisabled()) {\n\t\t\t\t\tbuttonContainer\n\t\t\t\t\t\t.classed(\"toolbar-button--disabled\", true)\n\t\t\t\t\t\t.classed(\"toolbar-button--focusable\", false)\n\t\t\t\t\t\t.attr(\"tabindex\", -1)\n\t\t\t\t\t\t.attr(\"role\", null);\n\t\t\t\t\tbuttonIcon.classed(\"toolbar-button-icon--disabled\", true);\n\t\t\t\t\tbuttonBackground.classed(\n\t\t\t\t\t\t\"toolbar-button-background--disabled\",\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\t\t\t\t\tbuttonContainer.on(\"click\", null).on(\"keyup\", null);\n\t\t\t\t} else {\n\t\t\t\t\tbuttonContainer\n\t\t\t\t\t\t.classed(\"toolbar-button--disabled\", false)\n\t\t\t\t\t\t.classed(\"toolbar-button--focusable\", true)\n\t\t\t\t\t\t.attr(\"tabindex\", 0)\n\t\t\t\t\t\t.attr(\"role\", Roles.BUTTON);\n\t\t\t\t\tbuttonIcon.classed(\"toolbar-button-icon--disabled\", false);\n\t\t\t\t\tbuttonBackground.classed(\n\t\t\t\t\t\t\"toolbar-button-background--disabled\",\n\t\t\t\t\t\tfalse\n\t\t\t\t\t);\n\t\t\t\t\tbuttonContainer\n\t\t\t\t\t\t.on(\"click\", button.clickFunction)\n\t\t\t\t\t\t.on(\"keyup\", () => {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t(event.key && event.key === \"Enter\") ||\n\t\t\t\t\t\t\t\tevent.key === \" \"\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\t\tbutton.clickFunction();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbuttonXPosition += buttonSize;\n\t\t\t});\n\n\t\t\tthis.overflowButton = this.getContainerSVG().select(\n\t\t\t\t\"svg.toolbar-overflow-menu\"\n\t\t\t);\n\n\t\t\tif (this.isOverflowMenuOpen()) {\n\t\t\t\t// keep overflow menu displayed\n\t\t\t\tthis.updateOverflowMenu(true);\n\t\t\t}\n\t\t}\n\t}\n\n\tisOverflowMenuOpen() {\n\t\treturn (\n\t\t\tthis.overflowMenu\n\t\t\t\t.selectAll(\"ul.bx--overflow-menu-options--open\")\n\t\t\t\t.size() > 0\n\t\t);\n\t}\n\n\t// show/hide overflow menu\n\tupdateOverflowMenu(show: boolean) {\n\t\t// update overflow button background\n\t\tif (this.overflowButton) {\n\t\t\tthis.overflowButton.classed(\"toolbar-button--hovered\", show);\n\t\t}\n\t\tif (show) {\n\t\t\tthis.services.events.dispatchEvent(\n\t\t\t\tEvents.Toolbar.SHOW_OVERFLOW_MENU\n\t\t\t);\n\t\t} else {\n\t\t\tthis.services.events.dispatchEvent(\n\t\t\t\tEvents.Toolbar.HIDE_OVERFLOW_MENU\n\t\t\t);\n\t\t}\n\t}\n\n\tfocusOnPreviousEnabledMenuItem(currentItemIndex) {\n\t\tconst overflowMenuItems = this.getOverflowMenuItems();\n\t\tlet previousItemIndex = overflowMenuItems.length;\n\t\tfor (let i = currentItemIndex - 1; i >= 0; i--) {\n\t\t\tconst previousOverflowMenuItem = overflowMenuItems[i];\n\t\t\tif (!previousOverflowMenuItem.shouldBeDisabled()) {\n\t\t\t\tpreviousItemIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t// only if previous enabled menu item found\n\t\tif (previousItemIndex < overflowMenuItems.length) {\n\t\t\tconst previousItemNode = select(\n\t\t\t\t\"#\" +\n\t\t\t\t\toverflowMenuItems[previousItemIndex].id +\n\t\t\t\t\tthis.overflowMenuItemId\n\t\t\t).node();\n\t\t\tif (\"focus\" in previousItemNode) {\n\t\t\t\tpreviousItemNode.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\tfocusOnNextEnabledMenuItem(currentItemIndex) {\n\t\tconst overflowMenuItems = this.getOverflowMenuItems();\n\t\tlet nextItemIndex = -1;\n\t\tfor (let i = currentItemIndex + 1; i < overflowMenuItems.length; i++) {\n\t\t\tconst nextOverflowMenuItem = overflowMenuItems[i];\n\t\t\tif (!nextOverflowMenuItem.shouldBeDisabled()) {\n\t\t\t\tnextItemIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t// only if next enabled menu item found\n\t\tif (nextItemIndex > -1) {\n\t\t\tconst nextItemNode = select(\n\t\t\t\t\"#\" +\n\t\t\t\t\toverflowMenuItems[nextItemIndex].id +\n\t\t\t\t\tthis.overflowMenuItemId\n\t\t\t).node();\n\t\t\tif (\"focus\" in nextItemNode) {\n\t\t\t\tnextItemNode.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\ttoggleOverflowMenu() {\n\t\tif (this.isOverflowMenuOpen()) {\n\t\t\t// hide overflow menu\n\t\t\tthis.updateOverflowMenu(false);\n\t\t} else {\n\t\t\t// show overflow menu\n\t\t\tthis.updateOverflowMenu(true);\n\n\t\t\t// setup overflow menu item event listener\n\t\t\tconst self = this;\n\t\t\tconst overflowMenuItems = this.getOverflowMenuItems();\n\t\t\toverflowMenuItems.forEach((menuItem, index) => {\n\t\t\t\tconst element = select(\n\t\t\t\t\t\"#\" + menuItem.id + this.overflowMenuItemId\n\t\t\t\t);\n\t\t\t\tif (element !== null) {\n\t\t\t\t\telement.on(\"click\", () => {\n\t\t\t\t\t\t// call the specified function\n\t\t\t\t\t\tmenuItem.clickFunction();\n\n\t\t\t\t\t\t// hide overflow menu\n\t\t\t\t\t\tself.updateOverflowMenu(false);\n\t\t\t\t\t});\n\t\t\t\t\telement.on(\"keyup\", () => {\n\t\t\t\t\t\tif (event.key === \"Enter\") {\n\t\t\t\t\t\t\t// call the specified function\n\t\t\t\t\t\t\tmenuItem.clickFunction();\n\t\t\t\t\t\t} else if (event.key === \"ArrowUp\") {\n\t\t\t\t\t\t\t// focus on previous menu item\n\t\t\t\t\t\t\tself.focusOnPreviousEnabledMenuItem(index);\n\t\t\t\t\t\t} else if (event.key === \"ArrowDown\") {\n\t\t\t\t\t\t\t// focus on next menu item\n\t\t\t\t\t\t\tself.focusOnNextEnabledMenuItem(index);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Not hide overflow menu by keyboard arrow up/down event\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// default to focus on the first enabled menu item\n\t\t\tself.focusOnNextEnabledMenuItem(-1);\n\t\t}\n\t\tevent.stopImmediatePropagation();\n\t}\n\n\tgetOverflowMenuHTML() {\n\t\tconst overflowMenuItems = this.getOverflowMenuItems();\n\t\t// don't render whole overflow menu if no overflow menu item\n\t\tif (!overflowMenuItems || overflowMenuItems.length === 0) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tlet overflowMenuHtml;\n\t\toverflowMenuHtml = `<div data-floating-menu-container=\"true\" data-floating-menu-direction=\"bottom\" role=\"main\">\n\t\t\t<ul class=\"bx--overflow-menu-options bx--overflow-menu--flip bx--overflow-menu-options--open\"\n\t\t\t\ttabindex=\"-1\" role=\"${Roles.MENU}\" aria-label=\"Menu\" data-floating-menu-direction=\"bottom\"\n\t\t\t\tstyle=\"left:${this.overflowMenuX}px; top:${this.overflowMenuY}px;\">`;\n\n\t\t// generate html for each overflow menu items\n\t\toverflowMenuItems.forEach((menuItem, index) => {\n\t\t\tconst menuItemClasses = \"bx--overflow-menu-options__option\".concat(\n\t\t\t\tmenuItem.shouldBeDisabled()\n\t\t\t\t\t? \" bx--overflow-menu-options__option--disabled\" // class for disabled menu item\n\t\t\t\t\t: \"\"\n\t\t\t);\n\t\t\toverflowMenuHtml += `<li class=\"${menuItemClasses}\" role=\"${\n\t\t\t\tRoles.MENU_ITEM\n\t\t\t}\">\n\t\t\t\t<button class=\"bx--overflow-menu-options__btn\"\n\t\t\t\t\tdata-floating-menu-primary-focus=\"${index === 0}\"\n\t\t\t\t\ttabindex=\"-1\" index=\"${index}\" title=\"${menuItem.text}\"\n\t\t\t\t\tid=\"${menuItem.id + this.overflowMenuItemId}\">\n\t\t\t\t\t<div class=\"bx--overflow-menu-options__option-content\">\n\t\t\t\t\t\t${menuItem.text}\n\t\t\t\t\t</div>\n\t\t\t\t</button>\n\t\t\t</li>`;\n\t\t});\n\n\t\toverflowMenuHtml += `</ul></div>`;\n\t\treturn overflowMenuHtml;\n\t}\n\n\tgetControlConfigs() {\n\t\tconst numberOfIcons = Tools.getProperty(\n\t\t\tthis.model.getOptions(),\n\t\t\t\"toolbar\",\n\t\t\t\"numberOfIcons\"\n\t\t);\n\t\tconst controls = Tools.getProperty(\n\t\t\tthis.model.getOptions(),\n\t\t\t\"toolbar\",\n\t\t\t\"controls\"\n\t\t);\n\t\tconst controlList = [];\n\t\tcontrols.forEach((control) => {\n\t\t\tconst controlConfig = this.getControlConfigByType(control.type);\n\n\t\t\t// add to list if config is valid\n\t\t\tif (controlConfig) {\n\t\t\t\tcontrolConfig.text = control.text ? control.text : control.type;\n\t\t\t\tcontrolList.push(controlConfig);\n\t\t\t}\n\t\t});\n\n\t\tif (controlList.length <= numberOfIcons) {\n\t\t\treturn {\n\t\t\t\tbuttonList: controlList\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\t// leave one button for overflow button\n\t\t\tbuttonList: controlList.splice(0, numberOfIcons - 1),\n\t\t\toverflowMenuItemList: controlList\n\t\t};\n\t}\n\n\tgetOverflowMenuItems() {\n\t\tconst { overflowMenuItemList } = this.getControlConfigs();\n\t\tif (!!overflowMenuItemList) {\n\t\t\treturn overflowMenuItemList;\n\t\t} else {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\t// special button config for overflow button\n\tgetOverflowButtonConfig() {\n\t\treturn {\n\t\t\tid: \"toolbar-overflow-menu\",\n\t\t\tshouldBeDisabled: () => false,\n\t\t\ticonSVGContent: `<circle cx=\"16\" cy=\"8\" r=\"2\"></circle>\n\t\t\t\t\t\t\t <circle cx=\"16\" cy=\"16\" r=\"2\"></circle>\n\t\t\t\t\t\t\t <circle cx=\"16\" cy=\"24\" r=\"2\"></circle>`,\n\t\t\tclickFunction: () => this.toggleOverflowMenu()\n\t\t};\n\t}\n\n\tgetControlConfigByType(controlType: ToolbarControlTypes) {\n\t\tconst isZoomBarEnabled =\n\t\t\tthis.services.zoom.isZoomBarEnabled() &&\n\t\t\t!this.services.zoom.isEmptyState();\n\n\t\tlet controlConfig;\n\t\tswitch (controlType) {\n\t\t\tcase ToolbarControlTypes.ZOOM_IN:\n\t\t\t\tif (isZoomBarEnabled) {\n\t\t\t\t\tcontrolConfig = {\n\t\t\t\t\t\tid: \"toolbar-zoomIn\",\n\t\t\t\t\t\tshouldBeDisabled: () =>\n\t\t\t\t\t\t\tthis.services.zoom.isMinZoomDomain(),\n\t\t\t\t\t\ticonSVGContent: this.getControlIconByType(controlType),\n\t\t\t\t\t\tclickFunction: () => this.services.zoom.zoomIn()\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.ZOOM_OUT:\n\t\t\t\tif (isZoomBarEnabled) {\n\t\t\t\t\tcontrolConfig = {\n\t\t\t\t\t\tid: \"toolbar-zoomOut\",\n\t\t\t\t\t\tshouldBeDisabled: () =>\n\t\t\t\t\t\t\tthis.services.zoom.isMaxZoomDomain(),\n\t\t\t\t\t\ticonSVGContent: this.getControlIconByType(controlType),\n\t\t\t\t\t\tclickFunction: () => this.services.zoom.zoomOut()\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.RESET_ZOOM:\n\t\t\t\tif (isZoomBarEnabled) {\n\t\t\t\t\tcontrolConfig = {\n\t\t\t\t\t\tid: \"toolbar-resetZoom\",\n\t\t\t\t\t\tshouldBeDisabled: () =>\n\t\t\t\t\t\t\tthis.services.zoom.isMaxZoomDomain(),\n\t\t\t\t\t\ticonSVGContent: this.getControlIconByType(controlType),\n\t\t\t\t\t\tclickFunction: () =>\n\t\t\t\t\t\t\tthis.services.zoom.resetZoomDomain()\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// add more toolbar control configuration here\n\n\t\t\tdefault:\n\t\t\t\tthrow Error(\n\t\t\t\t\t\"Not supported toolbar control type: \" + controlType\n\t\t\t\t);\n\t\t}\n\t\treturn controlConfig;\n\t}\n\n\tgetControlIconByType(controlType: ToolbarControlTypes) {\n\t\tswitch (controlType) {\n\t\t\tcase ToolbarControlTypes.ZOOM_IN:\n\t\t\t\treturn `<polygon points=\"19 13 15 13 15 9 13 9 13 13 9 13 9 15 13 15 13 19 15 19 15 15 19 15 19 13\"/>\n \t\t\t\t\t<path d=\"M22.45,21A10.87,10.87,0,0,0,25,14,11,11,0,1,0,14,25a10.87,10.87,0,0,0,7-2.55L28.59,30,30,28.59ZM14,23a9,9,0,1,1,9-9A9,9,0,0,1,14,23Z\"/>`;\n\t\t\tcase ToolbarControlTypes.ZOOM_OUT:\n\t\t\t\treturn `<rect x=\"9\" y=\"13\" width=\"10\" height=\"2\"/>\n\t\t\t\t\t\t<path d=\"M22.45,21A10.87,10.87,0,0,0,25,14,11,11,0,1,0,14,25a10.87,10.87,0,0,0,7-2.55L28.59,30,30,28.59ZM14,23a9,9,0,1,1,9-9A9,9,0,0,1,14,23Z\"/>`;\n\t\t\tcase ToolbarControlTypes.RESET_ZOOM:\n\t\t\t\treturn `<path d=\"M22.4478,21A10.855,10.855,0,0,0,25,14,10.99,10.99,0,0,0,6,6.4658V2H4v8h8V8H7.332a8.9768,8.9768,0,1,1-2.1,8H3.1912A11.0118,11.0118,0,0,0,14,25a10.855,10.855,0,0,0,7-2.5522L28.5859,30,30,28.5859Z\"/>`;\n\n\t\t\t// add more icons here\n\t\t\t// svg icon must be with 32x32 viewBox\n\n\t\t\tdefault:\n\t\t\t\tthrow Error(\n\t\t\t\t\t\"Not supported toolbar control type: \" + controlType\n\t\t\t\t);\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"toolbar.js","sourceRoot":"","sources":["toolbar.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { Events, Roles, ToolbarControlTypes } from \"../../interfaces\";\nimport { Tools } from \"../../tools\";\nimport { DOMUtils } from \"../../services\";\nimport * as Configuration from \"../../configuration\";\n\n// D3 Imports\nimport { event, select } from \"d3-selection\";\n\n// import the settings for the css prefix\nimport settings from \"carbon-components/es/globals/js/settings\";\n\nexport class Toolbar extends Component {\n\ttype = \"toolbar\";\n\n\t// overflow menu button to control background color\n\toverflowButton: any;\n\n\t// ul options list element\n\toverflowMenu: any;\n\n\t// x, y coordinate of overflow menu\n\toverflowMenuX = 0;\n\toverflowMenuY = 0;\n\n\t// Use a random number to create overflow menu item unique ID\n\t// so they don't interfere the other overflow menu item in a page\n\toverflowMenuItemId = Math.floor(Math.random() * 99999999999);\n\n\tinit() {\n\t\tconst options = this.getOptions();\n\n\t\t// Grab the tooltip element\n\t\tconst holder = select(this.services.domUtils.getHolder());\n\t\tconst chartPrefix = Tools.getProperty(options, \"style\", \"prefix\");\n\n\t\tthis.overflowMenu = DOMUtils.appendOrSelect(\n\t\t\tholder,\n\t\t\t`div.${settings.prefix}--${chartPrefix}--overflowMenu`\n\t\t);\n\n\t\tthis.overflowMenu.style(\"max-width\", null);\n\n\t\t// listen to show overflow menu event to render the overflow menu\n\t\tthis.services.events.addEventListener(\n\t\t\tEvents.Toolbar.SHOW_OVERFLOW_MENU,\n\t\t\t() => {\n\t\t\t\tthis.overflowMenu.html(this.getOverflowMenuHTML());\n\t\t\t}\n\t\t);\n\n\t\t// listen to hide overflow menu event to hide the overflow menu\n\t\tthis.services.events.addEventListener(\n\t\t\tEvents.Toolbar.HIDE_OVERFLOW_MENU,\n\t\t\t() => {\n\t\t\t\tthis.overflowMenu.html(null);\n\t\t\t}\n\t\t);\n\t\t// hide overflow menu if user clicks on somewhere in web page\n\t\tdocument.body.addEventListener(\"click\", () =>\n\t\t\tthis.updateOverflowMenu(false)\n\t\t);\n\t}\n\n\trender(animate = true) {\n\t\tconst isDataLoading = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t\"data\",\n\t\t\t\"loading\"\n\t\t);\n\n\t\t// size of toolbar button with background\n\t\tconst buttonSize = Configuration.toolbar.buttonSize;\n\t\tconst parentY = parseFloat(this.parent.node().getAttribute(\"y\"));\n\n\t\tconst svg = this.getContainerSVG();\n\n\t\t// TODO -- adjust toolbar Y position to align title component\n\t\t// before layout component supports vertical alignment center\n\t\tconst Y_OFFSET = -6;\n\t\tsvg.attr(\"transform\", `translate(0, ${parentY + Y_OFFSET})`);\n\n\t\tconst { width } = DOMUtils.getSVGElementSize(\n\t\t\tthis.services.domUtils.getMainSVG(),\n\t\t\t{\n\t\t\t\tuseAttrs: true\n\t\t\t}\n\t\t);\n\n\t\t// overflow menu width is 160px\n\t\t// it's set by Carbon component\n\t\tconst overflowMenuWidth = 160;\n\t\t// no good solution to get correct Toolbar position\n\t\t// parent x doesn't work well\n\t\t// assume the overflow icon has right alignment in layout\n\t\tthis.overflowMenuX = width - overflowMenuWidth;\n\t\tthis.overflowMenuY = parentY + Y_OFFSET + buttonSize;\n\t\tconst container = DOMUtils.appendOrSelect(svg, \"svg.toolbar-container\")\n\t\t\t.attr(\"width\", \"100%\")\n\t\t\t.attr(\"height\", Configuration.toolbar.height)\n\t\t\t.attr(\"opacity\", 1);\n\n\t\t// clean children first\n\t\tcontainer.html(null);\n\n\t\t// get the toolbar buttons\n\t\tconst { buttonList, overflowMenuItemList } = this.getControlConfigs();\n\n\t\t// overflow button is required only if overflow menu item list is valid\n\t\tif (!!overflowMenuItemList) {\n\t\t\tbuttonList.push(this.getOverflowButtonConfig());\n\t\t}\n\n\t\t// loading or empty state\n\t\tif (isDataLoading || buttonList.length === 0) {\n\t\t\t// put an empty rect to keep space unchanged\n\t\t\tDOMUtils.appendOrSelect(container, \"svg.toolbar-loading-spacer\")\n\t\t\t\t.append(\"rect\")\n\t\t\t\t.attr(\"height\", Configuration.toolbar.height)\n\t\t\t\t.attr(\"width\", buttonSize * 3) // value doesn't matter but can't be empty\n\t\t\t\t.attr(\"opacity\", 0);\n\t\t} else {\n\t\t\t// render toolbar buttons sequentially\n\t\t\tlet buttonXPosition = 0;\n\t\t\tbuttonList.forEach((button) => {\n\t\t\t\t// button container\n\t\t\t\tconst buttonContainer = DOMUtils.appendOrSelect(\n\t\t\t\t\tcontainer,\n\t\t\t\t\t`svg.${button.id}`\n\t\t\t\t).classed(\"toolbar-button\", true);\n\n\t\t\t\t// add button background rect\n\t\t\t\tconst buttonBackground = DOMUtils.appendOrSelect(\n\t\t\t\t\tbuttonContainer,\n\t\t\t\t\t\"rect.toolbar-button-background\"\n\t\t\t\t)\n\t\t\t\t\t.attr(\"x\", buttonXPosition)\n\t\t\t\t\t.attr(\"y\", 0)\n\t\t\t\t\t.attr(\"width\", buttonSize)\n\t\t\t\t\t.attr(\"height\", buttonSize);\n\n\t\t\t\tconst buttonIcon = DOMUtils.appendOrSelect(\n\t\t\t\t\tbuttonContainer,\n\t\t\t\t\t\"svg.toolbar-button-icon\"\n\t\t\t\t)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t\"x\",\n\t\t\t\t\t\tbuttonXPosition + Configuration.toolbar.iconPadding\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\"y\", Configuration.toolbar.iconPadding)\n\t\t\t\t\t.attr(\"width\", Configuration.toolbar.iconSize)\n\t\t\t\t\t.attr(\"height\", Configuration.toolbar.iconSize)\n\t\t\t\t\t.attr(\"viewBox\", \"0 0 32 32\")\n\t\t\t\t\t.attr(\"role\", Roles.IMG);\n\n\t\t\t\tbuttonIcon.html(button.iconSVGContent);\n\t\t\t\tif (button.shouldBeDisabled()) {\n\t\t\t\t\tbuttonContainer\n\t\t\t\t\t\t.classed(\"toolbar-button--disabled\", true)\n\t\t\t\t\t\t.classed(\"toolbar-button--focusable\", false)\n\t\t\t\t\t\t.attr(\"tabindex\", -1)\n\t\t\t\t\t\t.attr(\"role\", null);\n\t\t\t\t\tbuttonIcon.classed(\"toolbar-button-icon--disabled\", true);\n\t\t\t\t\tbuttonBackground.classed(\n\t\t\t\t\t\t\"toolbar-button-background--disabled\",\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\t\t\t\t\tbuttonContainer.on(\"click\", null).on(\"keyup\", null);\n\t\t\t\t} else {\n\t\t\t\t\tbuttonContainer\n\t\t\t\t\t\t.classed(\"toolbar-button--disabled\", false)\n\t\t\t\t\t\t.classed(\"toolbar-button--focusable\", true)\n\t\t\t\t\t\t.attr(\"tabindex\", 0)\n\t\t\t\t\t\t.attr(\"role\", Roles.BUTTON);\n\t\t\t\t\tbuttonIcon.classed(\"toolbar-button-icon--disabled\", false);\n\t\t\t\t\tbuttonBackground.classed(\n\t\t\t\t\t\t\"toolbar-button-background--disabled\",\n\t\t\t\t\t\tfalse\n\t\t\t\t\t);\n\t\t\t\t\tbuttonContainer\n\t\t\t\t\t\t.on(\"click\", button.clickFunction)\n\t\t\t\t\t\t.on(\"keyup\", () => {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t(event.key && event.key === \"Enter\") ||\n\t\t\t\t\t\t\t\tevent.key === \" \"\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\t\tbutton.clickFunction();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbuttonXPosition += buttonSize;\n\t\t\t});\n\n\t\t\tthis.overflowButton = this.getContainerSVG().select(\n\t\t\t\t\"svg.toolbar-overflow-menu\"\n\t\t\t);\n\n\t\t\tif (this.isOverflowMenuOpen()) {\n\t\t\t\t// keep overflow menu displayed\n\t\t\t\tthis.updateOverflowMenu(true);\n\t\t\t}\n\t\t}\n\t}\n\n\tisOverflowMenuOpen() {\n\t\treturn (\n\t\t\tthis.overflowMenu\n\t\t\t\t.selectAll(\"ul.bx--overflow-menu-options--open\")\n\t\t\t\t.size() > 0\n\t\t);\n\t}\n\n\t// show/hide overflow menu\n\tupdateOverflowMenu(show: boolean) {\n\t\t// update overflow button background\n\t\tif (this.overflowButton) {\n\t\t\tthis.overflowButton.classed(\"toolbar-button--hovered\", show);\n\t\t}\n\t\tif (show) {\n\t\t\tthis.services.events.dispatchEvent(\n\t\t\t\tEvents.Toolbar.SHOW_OVERFLOW_MENU\n\t\t\t);\n\t\t} else {\n\t\t\tthis.services.events.dispatchEvent(\n\t\t\t\tEvents.Toolbar.HIDE_OVERFLOW_MENU\n\t\t\t);\n\t\t}\n\t}\n\n\tfocusOnPreviousEnabledMenuItem(currentItemIndex) {\n\t\tconst overflowMenuItems = this.getOverflowMenuItems();\n\t\tlet previousItemIndex = overflowMenuItems.length;\n\t\tfor (let i = currentItemIndex - 1; i >= 0; i--) {\n\t\t\tconst previousOverflowMenuItem = overflowMenuItems[i];\n\t\t\tif (!previousOverflowMenuItem.shouldBeDisabled()) {\n\t\t\t\tpreviousItemIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t// only if previous enabled menu item found\n\t\tif (previousItemIndex < overflowMenuItems.length) {\n\t\t\tconst previousItemNode = select(\n\t\t\t\t\"#\" +\n\t\t\t\t\toverflowMenuItems[previousItemIndex].id +\n\t\t\t\t\tthis.overflowMenuItemId\n\t\t\t).node();\n\t\t\tif (\"focus\" in previousItemNode) {\n\t\t\t\tpreviousItemNode.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\tfocusOnNextEnabledMenuItem(currentItemIndex) {\n\t\tconst overflowMenuItems = this.getOverflowMenuItems();\n\t\tlet nextItemIndex = -1;\n\t\tfor (let i = currentItemIndex + 1; i < overflowMenuItems.length; i++) {\n\t\t\tconst nextOverflowMenuItem = overflowMenuItems[i];\n\t\t\tif (!nextOverflowMenuItem.shouldBeDisabled()) {\n\t\t\t\tnextItemIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t// only if next enabled menu item found\n\t\tif (nextItemIndex > -1) {\n\t\t\tconst nextItemNode = select(\n\t\t\t\t\"#\" +\n\t\t\t\t\toverflowMenuItems[nextItemIndex].id +\n\t\t\t\t\tthis.overflowMenuItemId\n\t\t\t).node();\n\t\t\tif (\"focus\" in nextItemNode) {\n\t\t\t\tnextItemNode.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\ttoggleOverflowMenu() {\n\t\tif (this.isOverflowMenuOpen()) {\n\t\t\t// hide overflow menu\n\t\t\tthis.updateOverflowMenu(false);\n\t\t} else {\n\t\t\t// show overflow menu\n\t\t\tthis.updateOverflowMenu(true);\n\n\t\t\t// setup overflow menu item event listener\n\t\t\tconst self = this;\n\t\t\tconst overflowMenuItems = this.getOverflowMenuItems();\n\t\t\toverflowMenuItems.forEach((menuItem, index) => {\n\t\t\t\tconst element = select(\n\t\t\t\t\t\"#\" + menuItem.id + this.overflowMenuItemId\n\t\t\t\t);\n\t\t\t\tif (element !== null) {\n\t\t\t\t\telement.on(\"click\", () => {\n\t\t\t\t\t\t// call the specified function\n\t\t\t\t\t\tmenuItem.clickFunction();\n\n\t\t\t\t\t\t// hide overflow menu\n\t\t\t\t\t\tself.updateOverflowMenu(false);\n\t\t\t\t\t});\n\t\t\t\t\telement.on(\"keyup\", () => {\n\t\t\t\t\t\tif (event.key === \"Enter\") {\n\t\t\t\t\t\t\t// call the specified function\n\t\t\t\t\t\t\tmenuItem.clickFunction();\n\t\t\t\t\t\t} else if (event.key === \"ArrowUp\") {\n\t\t\t\t\t\t\t// focus on previous menu item\n\t\t\t\t\t\t\tself.focusOnPreviousEnabledMenuItem(index);\n\t\t\t\t\t\t} else if (event.key === \"ArrowDown\") {\n\t\t\t\t\t\t\t// focus on next menu item\n\t\t\t\t\t\t\tself.focusOnNextEnabledMenuItem(index);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Not hide overflow menu by keyboard arrow up/down event\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// default to focus on the first enabled menu item\n\t\t\tself.focusOnNextEnabledMenuItem(-1);\n\t\t}\n\t\tevent.stopImmediatePropagation();\n\t}\n\n\tgetOverflowMenuHTML() {\n\t\tconst overflowMenuItems = this.getOverflowMenuItems();\n\t\t// don't render whole overflow menu if no overflow menu item\n\t\tif (!overflowMenuItems || overflowMenuItems.length === 0) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tlet overflowMenuHtml;\n\t\toverflowMenuHtml = `<div data-floating-menu-container=\"true\" data-floating-menu-direction=\"bottom\" role=\"main\">\n\t\t\t<ul class=\"bx--overflow-menu-options bx--overflow-menu--flip bx--overflow-menu-options--open\"\n\t\t\t\ttabindex=\"-1\" role=\"${Roles.MENU}\" aria-label=\"Menu\" data-floating-menu-direction=\"bottom\"\n\t\t\t\tstyle=\"left:${this.overflowMenuX}px; top:${this.overflowMenuY}px;\">`;\n\n\t\t// generate html for each overflow menu items\n\t\toverflowMenuItems.forEach((menuItem, index) => {\n\t\t\tconst menuItemClasses = \"bx--overflow-menu-options__option\".concat(\n\t\t\t\tmenuItem.shouldBeDisabled()\n\t\t\t\t\t? \" bx--overflow-menu-options__option--disabled\" // class for disabled menu item\n\t\t\t\t\t: \"\"\n\t\t\t);\n\t\t\toverflowMenuHtml += `<li class=\"${menuItemClasses}\" role=\"${\n\t\t\t\tRoles.MENU_ITEM\n\t\t\t}\">\n\t\t\t\t<button class=\"bx--overflow-menu-options__btn\"\n\t\t\t\t\tdata-floating-menu-primary-focus=\"${index === 0}\"\n\t\t\t\t\ttabindex=\"-1\" index=\"${index}\" title=\"${menuItem.text}\"\n\t\t\t\t\tid=\"${menuItem.id + this.overflowMenuItemId}\">\n\t\t\t\t\t<div class=\"bx--overflow-menu-options__option-content\">\n\t\t\t\t\t\t${menuItem.text}\n\t\t\t\t\t</div>\n\t\t\t\t</button>\n\t\t\t</li>`;\n\t\t});\n\n\t\toverflowMenuHtml += `</ul></div>`;\n\t\treturn overflowMenuHtml;\n\t}\n\n\tgetControlConfigs() {\n\t\tconst numberOfIcons = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t\"toolbar\",\n\t\t\t\"numberOfIcons\"\n\t\t);\n\t\tconst controls = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t\"toolbar\",\n\t\t\t\"controls\"\n\t\t);\n\t\tconst controlList = [];\n\t\tcontrols.forEach((control) => {\n\t\t\tconst controlConfig = this.getControlConfigByType(control.type);\n\n\t\t\t// add to list if config is valid\n\t\t\tif (controlConfig) {\n\t\t\t\tcontrolConfig.text = control.text ? control.text : control.type;\n\t\t\t\tcontrolList.push(controlConfig);\n\t\t\t}\n\t\t});\n\n\t\tif (controlList.length <= numberOfIcons) {\n\t\t\treturn {\n\t\t\t\tbuttonList: controlList\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\t// leave one button for overflow button\n\t\t\tbuttonList: controlList.splice(0, numberOfIcons - 1),\n\t\t\toverflowMenuItemList: controlList\n\t\t};\n\t}\n\n\tgetOverflowMenuItems() {\n\t\tconst { overflowMenuItemList } = this.getControlConfigs();\n\t\tif (!!overflowMenuItemList) {\n\t\t\treturn overflowMenuItemList;\n\t\t} else {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\t// special button config for overflow button\n\tgetOverflowButtonConfig() {\n\t\treturn {\n\t\t\tid: \"toolbar-overflow-menu\",\n\t\t\tshouldBeDisabled: () => false,\n\t\t\ticonSVGContent: `<circle cx=\"16\" cy=\"8\" r=\"2\"></circle>\n\t\t\t\t\t\t\t <circle cx=\"16\" cy=\"16\" r=\"2\"></circle>\n\t\t\t\t\t\t\t <circle cx=\"16\" cy=\"24\" r=\"2\"></circle>`,\n\t\t\tclickFunction: () => this.toggleOverflowMenu()\n\t\t};\n\t}\n\n\tgetControlConfigByType(controlType: ToolbarControlTypes) {\n\t\tconst isZoomBarEnabled =\n\t\t\tthis.services.zoom.isZoomBarEnabled() &&\n\t\t\t!this.services.zoom.isEmptyState();\n\n\t\tlet controlConfig;\n\t\tswitch (controlType) {\n\t\t\tcase ToolbarControlTypes.ZOOM_IN:\n\t\t\t\tif (isZoomBarEnabled) {\n\t\t\t\t\tcontrolConfig = {\n\t\t\t\t\t\tid: \"toolbar-zoomIn\",\n\t\t\t\t\t\tshouldBeDisabled: () =>\n\t\t\t\t\t\t\tthis.services.zoom.isMinZoomDomain(),\n\t\t\t\t\t\ticonSVGContent: this.getControlIconByType(controlType),\n\t\t\t\t\t\tclickFunction: () => this.services.zoom.zoomIn()\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.ZOOM_OUT:\n\t\t\t\tif (isZoomBarEnabled) {\n\t\t\t\t\tcontrolConfig = {\n\t\t\t\t\t\tid: \"toolbar-zoomOut\",\n\t\t\t\t\t\tshouldBeDisabled: () =>\n\t\t\t\t\t\t\tthis.services.zoom.isMaxZoomDomain(),\n\t\t\t\t\t\ticonSVGContent: this.getControlIconByType(controlType),\n\t\t\t\t\t\tclickFunction: () => this.services.zoom.zoomOut()\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase ToolbarControlTypes.RESET_ZOOM:\n\t\t\t\tif (isZoomBarEnabled) {\n\t\t\t\t\tcontrolConfig = {\n\t\t\t\t\t\tid: \"toolbar-resetZoom\",\n\t\t\t\t\t\tshouldBeDisabled: () =>\n\t\t\t\t\t\t\tthis.services.zoom.isMaxZoomDomain(),\n\t\t\t\t\t\ticonSVGContent: this.getControlIconByType(controlType),\n\t\t\t\t\t\tclickFunction: () =>\n\t\t\t\t\t\t\tthis.services.zoom.resetZoomDomain()\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// add more toolbar control configuration here\n\n\t\t\tdefault:\n\t\t\t\tthrow Error(\n\t\t\t\t\t\"Not supported toolbar control type: \" + controlType\n\t\t\t\t);\n\t\t}\n\t\treturn controlConfig;\n\t}\n\n\tgetControlIconByType(controlType: ToolbarControlTypes) {\n\t\tswitch (controlType) {\n\t\t\tcase ToolbarControlTypes.ZOOM_IN:\n\t\t\t\treturn `<polygon points=\"19 13 15 13 15 9 13 9 13 13 9 13 9 15 13 15 13 19 15 19 15 15 19 15 19 13\"/>\n \t\t\t\t\t<path d=\"M22.45,21A10.87,10.87,0,0,0,25,14,11,11,0,1,0,14,25a10.87,10.87,0,0,0,7-2.55L28.59,30,30,28.59ZM14,23a9,9,0,1,1,9-9A9,9,0,0,1,14,23Z\"/>`;\n\t\t\tcase ToolbarControlTypes.ZOOM_OUT:\n\t\t\t\treturn `<rect x=\"9\" y=\"13\" width=\"10\" height=\"2\"/>\n\t\t\t\t\t\t<path d=\"M22.45,21A10.87,10.87,0,0,0,25,14,11,11,0,1,0,14,25a10.87,10.87,0,0,0,7-2.55L28.59,30,30,28.59ZM14,23a9,9,0,1,1,9-9A9,9,0,0,1,14,23Z\"/>`;\n\t\t\tcase ToolbarControlTypes.RESET_ZOOM:\n\t\t\t\treturn `<path d=\"M22.4478,21A10.855,10.855,0,0,0,25,14,10.99,10.99,0,0,0,6,6.4658V2H4v8h8V8H7.332a8.9768,8.9768,0,1,1-2.1,8H3.1912A11.0118,11.0118,0,0,0,14,25a10.855,10.855,0,0,0,7-2.5522L28.5859,30,30,28.5859Z\"/>`;\n\n\t\t\t// add more icons here\n\t\t\t// svg icon must be with 32x32 viewBox\n\n\t\t\tdefault:\n\t\t\t\tthrow Error(\n\t\t\t\t\t\"Not supported toolbar control type: \" + controlType\n\t\t\t\t);\n\t\t}\n\t}\n}\n"]}
@@ -50,7 +50,7 @@ var TwoDimensionalAxes = /** @class */ (function (_super) {
50
50
  if (animate === void 0) { animate = false; }
51
51
  var axes = {};
52
52
  var axisPositions = Object.keys(AxisPositions);
53
- var axesOptions = Tools.getProperty(this.model.getOptions(), "axes");
53
+ var axesOptions = Tools.getProperty(this.getOptions(), "axes");
54
54
  axisPositions.forEach(function (axisPosition) {
55
55
  var axisOptions = axesOptions[AxisPositions[axisPosition]];
56
56
  if (axisOptions) {
@@ -138,7 +138,7 @@ var TwoDimensionalAxes = /** @class */ (function (_super) {
138
138
  };
139
139
  TwoDimensionalAxes.prototype.addAxisThresholds = function (animate, axisPosition) {
140
140
  var _this = this;
141
- var axesOptions = Tools.getProperty(this.model.getOptions(), "axes", axisPosition);
141
+ var axesOptions = Tools.getProperty(this.getOptions(), "axes", axisPosition);
142
142
  var thresholds = axesOptions.thresholds;
143
143
  if (thresholds) {
144
144
  thresholds.forEach(function (thresholdConfig, i) {
@@ -1 +1 @@
1
- {"version":3,"file":"two-dimensional-axes.js","sourceRoot":"","sources":["two-dimensional-axes.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { AxisPositions, ScaleTypes, AxesOptions } from \"../../interfaces\";\nimport { Axis } from \"./axis\";\nimport { Tools } from \"../../tools\";\nimport { DOMUtils } from \"../../services\";\nimport { Threshold } from \"../essentials/threshold\";\nimport { Events } from \"./../../interfaces\";\n\nexport class TwoDimensionalAxes extends Component {\n\ttype = \"2D-axes\";\n\n\tchildren: any = {};\n\n\tthresholds: Threshold[] = [];\n\n\tmargins = {\n\t\ttop: 0,\n\t\tright: 0,\n\t\tbottom: 0,\n\t\tleft: 0\n\t};\n\n\trender(animate = false) {\n\t\tconst axes = {};\n\t\tconst axisPositions = Object.keys(AxisPositions);\n\t\tconst axesOptions = Tools.getProperty(this.model.getOptions(), \"axes\");\n\n\t\taxisPositions.forEach((axisPosition) => {\n\t\t\tconst axisOptions = axesOptions[AxisPositions[axisPosition]];\n\t\t\tif (axisOptions) {\n\t\t\t\taxes[AxisPositions[axisPosition]] = true;\n\t\t\t}\n\t\t});\n\n\t\tthis.configs.axes = axes;\n\n\t\t// Check the configs to know which axes need to be rendered\n\t\taxisPositions.forEach((axisPositionKey) => {\n\t\t\tconst axisPosition = AxisPositions[axisPositionKey];\n\t\t\tif (\n\t\t\t\tthis.configs.axes[axisPosition] &&\n\t\t\t\t!this.children[axisPosition]\n\t\t\t) {\n\t\t\t\tconst axisComponent = new Axis(this.model, this.services, {\n\t\t\t\t\tposition: axisPosition,\n\t\t\t\t\taxes: this.configs.axes,\n\t\t\t\t\tmargins: this.margins\n\t\t\t\t});\n\n\t\t\t\t// Set model, services & parent for the new axis component\n\t\t\t\taxisComponent.setModel(this.model);\n\t\t\t\taxisComponent.setServices(this.services);\n\t\t\t\taxisComponent.setParent(this.parent);\n\n\t\t\t\tthis.children[axisPosition] = axisComponent;\n\t\t\t}\n\t\t});\n\n\t\tObject.keys(this.children).forEach((childKey) => {\n\t\t\tconst child = this.children[childKey];\n\t\t\tchild.render(animate);\n\t\t});\n\n\t\tconst margins = {} as any;\n\n\t\tObject.keys(this.children).forEach((childKey) => {\n\t\t\tconst child = this.children[childKey];\n\t\t\tconst axisPosition = child.configs.position;\n\n\t\t\t// Grab the invisibly rendered axis' width & height, and set margins\n\t\t\t// Based off of that\n\t\t\t// We draw the invisible axis because of the async nature of d3 transitions\n\t\t\t// To be able to tell the final width & height of the axis when initiaing the transition\n\t\t\t// The invisible axis is updated instantly and without a transition\n\t\t\tconst invisibleAxisRef = child.getInvisibleAxisRef();\n\t\t\tconst {\n\t\t\t\twidth,\n\t\t\t\theight\n\t\t\t} = DOMUtils.getSVGElementSize(invisibleAxisRef, { useBBox: true });\n\n\t\t\tlet offset;\n\t\t\tif (child.getTitleRef().empty()) {\n\t\t\t\toffset = 0;\n\t\t\t} else {\n\t\t\t\toffset = DOMUtils.getSVGElementSize(\n\t\t\t\t\tchild.getTitleRef(),\n\t\t\t\t\t{\n\t\t\t\t\t\tuseBBox: true\n\t\t\t\t\t}\n\t\t\t\t).height;\n\n\t\t\t\tif (\n\t\t\t\t\taxisPosition === AxisPositions.LEFT ||\n\t\t\t\t\taxisPosition === AxisPositions.RIGHT\n\t\t\t\t) {\n\t\t\t\t\toffset += 5;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tswitch (axisPosition) {\n\t\t\t\tcase AxisPositions.TOP:\n\t\t\t\t\tmargins.top = height + offset;\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\t\tmargins.bottom = height + offset;\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.LEFT:\n\t\t\t\t\tmargins.left = width + offset;\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\t\tmargins.right = width + offset;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Add thresholds\n\t\t\tthis.addAxisThresholds(animate, axisPosition);\n\t\t});\n\n\t\t// If the new margins are different than the existing ones\n\t\tconst isNotEqual = Object.keys(margins).some((marginKey) => {\n\t\t\treturn this.margins[marginKey] !== margins[marginKey];\n\t\t});\n\n\t\tif (isNotEqual) {\n\t\t\tthis.margins = Object.assign(this.margins, margins);\n\n\t\t\t// also set new margins to model to allow external components to access\n\t\t\tthis.model.set({ axesMargins: this.margins }, { skipUpdate: true });\n\t\t\tthis.services.events.dispatchEvent(Events.ZoomBar.UPDATE);\n\n\t\t\tObject.keys(this.children).forEach((childKey) => {\n\t\t\t\tconst child = this.children[childKey];\n\t\t\t\tchild.margins = this.margins;\n\t\t\t});\n\n\t\t\tthis.render(true);\n\t\t}\n\t}\n\n\taddAxisThresholds(animate, axisPosition) {\n\t\tconst axesOptions = Tools.getProperty(\n\t\t\tthis.model.getOptions(),\n\t\t\t\"axes\",\n\t\t\taxisPosition\n\t\t);\n\t\tconst { thresholds } = axesOptions;\n\n\t\tif (thresholds) {\n\t\t\tthresholds.forEach((thresholdConfig, i) => {\n\t\t\t\tconst thresholdComponent = new Threshold(\n\t\t\t\t\tthis.model,\n\t\t\t\t\tthis.services,\n\t\t\t\t\t{ ...thresholdConfig, axisPosition, index: i }\n\t\t\t\t);\n\t\t\t\tthis.thresholds.push(thresholdComponent);\n\t\t\t});\n\n\t\t\tthis.thresholds.forEach((threshold) => {\n\t\t\t\tthreshold.setParent(this.parent);\n\t\t\t\tthreshold.render(animate);\n\t\t\t});\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"two-dimensional-axes.js","sourceRoot":"","sources":["two-dimensional-axes.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { AxisPositions, ScaleTypes, AxesOptions } from \"../../interfaces\";\nimport { Axis } from \"./axis\";\nimport { Tools } from \"../../tools\";\nimport { DOMUtils } from \"../../services\";\nimport { Threshold } from \"../essentials/threshold\";\nimport { Events } from \"./../../interfaces\";\n\nexport class TwoDimensionalAxes extends Component {\n\ttype = \"2D-axes\";\n\n\tchildren: any = {};\n\n\tthresholds: Threshold[] = [];\n\n\tmargins = {\n\t\ttop: 0,\n\t\tright: 0,\n\t\tbottom: 0,\n\t\tleft: 0\n\t};\n\n\trender(animate = false) {\n\t\tconst axes = {};\n\t\tconst axisPositions = Object.keys(AxisPositions);\n\t\tconst axesOptions = Tools.getProperty(this.getOptions(), \"axes\");\n\n\t\taxisPositions.forEach((axisPosition) => {\n\t\t\tconst axisOptions = axesOptions[AxisPositions[axisPosition]];\n\t\t\tif (axisOptions) {\n\t\t\t\taxes[AxisPositions[axisPosition]] = true;\n\t\t\t}\n\t\t});\n\n\t\tthis.configs.axes = axes;\n\n\t\t// Check the configs to know which axes need to be rendered\n\t\taxisPositions.forEach((axisPositionKey) => {\n\t\t\tconst axisPosition = AxisPositions[axisPositionKey];\n\t\t\tif (\n\t\t\t\tthis.configs.axes[axisPosition] &&\n\t\t\t\t!this.children[axisPosition]\n\t\t\t) {\n\t\t\t\tconst axisComponent = new Axis(this.model, this.services, {\n\t\t\t\t\tposition: axisPosition,\n\t\t\t\t\taxes: this.configs.axes,\n\t\t\t\t\tmargins: this.margins\n\t\t\t\t});\n\n\t\t\t\t// Set model, services & parent for the new axis component\n\t\t\t\taxisComponent.setModel(this.model);\n\t\t\t\taxisComponent.setServices(this.services);\n\t\t\t\taxisComponent.setParent(this.parent);\n\n\t\t\t\tthis.children[axisPosition] = axisComponent;\n\t\t\t}\n\t\t});\n\n\t\tObject.keys(this.children).forEach((childKey) => {\n\t\t\tconst child = this.children[childKey];\n\t\t\tchild.render(animate);\n\t\t});\n\n\t\tconst margins = {} as any;\n\n\t\tObject.keys(this.children).forEach((childKey) => {\n\t\t\tconst child = this.children[childKey];\n\t\t\tconst axisPosition = child.configs.position;\n\n\t\t\t// Grab the invisibly rendered axis' width & height, and set margins\n\t\t\t// Based off of that\n\t\t\t// We draw the invisible axis because of the async nature of d3 transitions\n\t\t\t// To be able to tell the final width & height of the axis when initiaing the transition\n\t\t\t// The invisible axis is updated instantly and without a transition\n\t\t\tconst invisibleAxisRef = child.getInvisibleAxisRef();\n\t\t\tconst {\n\t\t\t\twidth,\n\t\t\t\theight\n\t\t\t} = DOMUtils.getSVGElementSize(invisibleAxisRef, { useBBox: true });\n\n\t\t\tlet offset;\n\t\t\tif (child.getTitleRef().empty()) {\n\t\t\t\toffset = 0;\n\t\t\t} else {\n\t\t\t\toffset = DOMUtils.getSVGElementSize(\n\t\t\t\t\tchild.getTitleRef(),\n\t\t\t\t\t{\n\t\t\t\t\t\tuseBBox: true\n\t\t\t\t\t}\n\t\t\t\t).height;\n\n\t\t\t\tif (\n\t\t\t\t\taxisPosition === AxisPositions.LEFT ||\n\t\t\t\t\taxisPosition === AxisPositions.RIGHT\n\t\t\t\t) {\n\t\t\t\t\toffset += 5;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tswitch (axisPosition) {\n\t\t\t\tcase AxisPositions.TOP:\n\t\t\t\t\tmargins.top = height + offset;\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\t\tmargins.bottom = height + offset;\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.LEFT:\n\t\t\t\t\tmargins.left = width + offset;\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\t\tmargins.right = width + offset;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Add thresholds\n\t\t\tthis.addAxisThresholds(animate, axisPosition);\n\t\t});\n\n\t\t// If the new margins are different than the existing ones\n\t\tconst isNotEqual = Object.keys(margins).some((marginKey) => {\n\t\t\treturn this.margins[marginKey] !== margins[marginKey];\n\t\t});\n\n\t\tif (isNotEqual) {\n\t\t\tthis.margins = Object.assign(this.margins, margins);\n\n\t\t\t// also set new margins to model to allow external components to access\n\t\t\tthis.model.set({ axesMargins: this.margins }, { skipUpdate: true });\n\t\t\tthis.services.events.dispatchEvent(Events.ZoomBar.UPDATE);\n\n\t\t\tObject.keys(this.children).forEach((childKey) => {\n\t\t\t\tconst child = this.children[childKey];\n\t\t\t\tchild.margins = this.margins;\n\t\t\t});\n\n\t\t\tthis.render(true);\n\t\t}\n\t}\n\n\taddAxisThresholds(animate, axisPosition) {\n\t\tconst axesOptions = Tools.getProperty(\n\t\t\tthis.getOptions(),\n\t\t\t\"axes\",\n\t\t\taxisPosition\n\t\t);\n\t\tconst { thresholds } = axesOptions;\n\n\t\tif (thresholds) {\n\t\t\tthresholds.forEach((thresholdConfig, i) => {\n\t\t\t\tconst thresholdComponent = new Threshold(\n\t\t\t\t\tthis.model,\n\t\t\t\t\tthis.services,\n\t\t\t\t\t{ ...thresholdConfig, axisPosition, index: i }\n\t\t\t\t);\n\t\t\t\tthis.thresholds.push(thresholdComponent);\n\t\t\t});\n\n\t\t\tthis.thresholds.forEach((threshold) => {\n\t\t\t\tthreshold.setParent(this.parent);\n\t\t\t\tthreshold.render(animate);\n\t\t\t});\n\t\t}\n\t}\n}\n"]}
@@ -23,25 +23,29 @@ var ZeroLine = /** @class */ (function (_super) {
23
23
  return _this;
24
24
  }
25
25
  ZeroLine.prototype.render = function (animate) {
26
- var _a = this.services.cartesianScales.getRangeScale().domain(), minDomainValue = _a[0], maxDomainValue = _a[1];
26
+ var axisPosition = this.services.cartesianScales.getRangeAxisPosition({ groups: this.configs.groups });
27
+ var rangeScale = this.services.cartesianScales.getScaleByPosition(axisPosition);
28
+ // check the domain
29
+ var _a = rangeScale.domain(), minDomainValue = _a[0], maxDomainValue = _a[1];
27
30
  var drawZeroLine = (minDomainValue > 0 && maxDomainValue < 0) ||
28
31
  (minDomainValue < 0 && maxDomainValue > 0);
29
- // show zero line only if is necessary
32
+ // Grab container SVG
33
+ var svg = this.getContainerSVG();
34
+ // show zero line only if is necessary, otherwise make sure tto remove zero line if the chart
35
+ // previously had a domain that went into negatives
30
36
  if (!drawZeroLine) {
37
+ // otherwise if a chart draws a zero line and then the domain change the zero line is still in the DOM
38
+ svg.selectAll("line.domain").remove();
31
39
  return;
32
40
  }
33
- // Grab container SVG
34
- var svg = this.getContainerSVG();
35
41
  // Get x & y position of the line
36
42
  var _b = this.services.cartesianScales.getDomainScale().range(), x0 = _b[0], x1 = _b[1];
37
- var yPosition = +this.services.cartesianScales.getRangeValue(0) + 0.5;
43
+ var yPosition = +rangeScale(0) + 0.5;
38
44
  // if scale domain contains NaN, return the first value of the range
39
45
  // this is necessary for the zero line y position that otherwise is NaN
40
46
  // so on the top of the chart while we want it on the bottom
41
47
  if (!yPosition) {
42
- var axisPosition = this.services.cartesianScales.getRangeAxisPosition();
43
- var scale = this.services.cartesianScales.getScaleByPosition(axisPosition);
44
- yPosition = scale.range()[0];
48
+ yPosition = rangeScale.range()[0];
45
49
  }
46
50
  var lineCoordinates = Tools.flipSVGCoordinatesBasedOnOrientation({
47
51
  x0: x0,
@@ -1 +1 @@
1
- {"version":3,"file":"zero-line.js","sourceRoot":"","sources":["zero-line.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC;IAA8B,4BAAS;IAAvC;QAAA,qEAsDC;QArDA,UAAI,GAAG,WAAW,CAAC;;IAqDpB,CAAC;IAnDA,yBAAM,GAAN,UAAO,OAAgB;QAChB,IAAA,2DAGoD,EAFzD,sBAAc,EACd,sBACyD,CAAC;QAC3D,IAAM,YAAY,GACjB,CAAC,cAAc,GAAG,CAAC,IAAI,cAAc,GAAG,CAAC,CAAC;YAC1C,CAAC,cAAc,GAAG,CAAC,IAAI,cAAc,GAAG,CAAC,CAAC,CAAC;QAE5C,sCAAsC;QACtC,IAAI,CAAC,YAAY,EAAE;YAClB,OAAO;SACP;QAED,qBAAqB;QACrB,IAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAEnC,iCAAiC;QAC3B,IAAA,2DAAiE,EAAhE,UAAE,EAAE,UAA4D,CAAC;QACxE,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAEtE,oEAAoE;QACpE,uEAAuE;QACvE,4DAA4D;QAC5D,IAAI,CAAC,SAAS,EAAE;YACf,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,oBAAoB,EAAE,CAAC;YAC1E,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,kBAAkB,CAC7D,YAAY,CACZ,CAAC;YACF,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;SAC7B;QAED,IAAM,eAAe,GAAG,KAAK,CAAC,oCAAoC,CACjE;YACC,EAAE,IAAA;YACF,EAAE,IAAA;YACF,EAAE,EAAE,SAAS;YACb,EAAE,EAAE,SAAS;SACb,EACD,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE,CAC9C,CAAC;QAEF,IAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,CACd,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,kBAAkB,EAAE,OAAO,CAAC,CACpE;aACC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IACF,eAAC;AAAD,CAAC,AAtDD,CAA8B,SAAS,GAsDtC","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { DOMUtils } from \"../../services\";\nimport { Tools } from \"../../tools\";\n\nexport class ZeroLine extends Component {\n\ttype = \"zero-line\";\n\n\trender(animate: boolean) {\n\t\tconst [\n\t\t\tminDomainValue,\n\t\t\tmaxDomainValue\n\t\t] = this.services.cartesianScales.getRangeScale().domain();\n\t\tconst drawZeroLine =\n\t\t\t(minDomainValue > 0 && maxDomainValue < 0) ||\n\t\t\t(minDomainValue < 0 && maxDomainValue > 0);\n\n\t\t// show zero line only if is necessary\n\t\tif (!drawZeroLine) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Grab container SVG\n\t\tconst svg = this.getContainerSVG();\n\n\t\t// Get x & y position of the line\n\t\tconst [x0, x1] = this.services.cartesianScales.getDomainScale().range();\n\t\tlet yPosition = +this.services.cartesianScales.getRangeValue(0) + 0.5;\n\n\t\t// if scale domain contains NaN, return the first value of the range\n\t\t// this is necessary for the zero line y position that otherwise is NaN\n\t\t// so on the top of the chart while we want it on the bottom\n\t\tif (!yPosition) {\n\t\t\tconst axisPosition = this.services.cartesianScales.getRangeAxisPosition();\n\t\t\tconst scale = this.services.cartesianScales.getScaleByPosition(\n\t\t\t\taxisPosition\n\t\t\t);\n\t\t\tyPosition = scale.range()[0];\n\t\t}\n\n\t\tconst lineCoordinates = Tools.flipSVGCoordinatesBasedOnOrientation(\n\t\t\t{\n\t\t\t\tx0,\n\t\t\t\tx1,\n\t\t\t\ty0: yPosition,\n\t\t\t\ty1: yPosition\n\t\t\t},\n\t\t\tthis.services.cartesianScales.getOrientation()\n\t\t);\n\n\t\tconst line = DOMUtils.appendOrSelect(svg, \"line.domain\");\n\t\tline.transition(\n\t\t\tthis.services.transitions.getTransition(\"zero-line-update\", animate)\n\t\t)\n\t\t\t.attr(\"y1\", lineCoordinates.y0)\n\t\t\t.attr(\"y2\", lineCoordinates.y1)\n\t\t\t.attr(\"x1\", lineCoordinates.x0)\n\t\t\t.attr(\"x2\", lineCoordinates.x1);\n\t}\n}\n"]}
1
+ {"version":3,"file":"zero-line.js","sourceRoot":"","sources":["zero-line.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC;IAA8B,4BAAS;IAAvC;QAAA,qEAyDC;QAxDA,UAAI,GAAG,WAAW,CAAC;;IAwDpB,CAAC;IAtDA,yBAAM,GAAN,UAAO,OAAgB;QACtB,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,oBAAoB,CAAC,EAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAC,CAAC,CAAC;QACvG,IAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;QAClF,mBAAmB;QACb,IAAA,wBAGiB,EAFtB,sBAAc,EACd,sBACsB,CAAC;QAExB,IAAM,YAAY,GACjB,CAAC,cAAc,GAAG,CAAC,IAAI,cAAc,GAAG,CAAC,CAAC;YAC1C,CAAC,cAAc,GAAG,CAAC,IAAI,cAAc,GAAG,CAAC,CAAC,CAAC;QAE5C,qBAAqB;QACrB,IAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAEnC,6FAA6F;QAC7F,mDAAmD;QACnD,IAAI,CAAC,YAAY,EAAE;YAClB,sGAAsG;YACtG,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,CAAC;YACtC,OAAO;SACP;QAED,iCAAiC;QAC3B,IAAA,2DAAiE,EAAhE,UAAE,EAAE,UAA4D,CAAC;QACxE,IAAI,SAAS,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC;QAEtC,oEAAoE;QACpE,uEAAuE;QACvE,4DAA4D;QAC5D,IAAI,CAAC,SAAS,EAAE;YACf,SAAS,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;SAClC;QAED,IAAM,eAAe,GAAG,KAAK,CAAC,oCAAoC,CACjE;YACC,EAAE,IAAA;YACF,EAAE,IAAA;YACF,EAAE,EAAE,SAAS;YACb,EAAE,EAAE,SAAS;SACb,EACD,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE,CAC9C,CAAC;QAEF,IAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,CACd,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,kBAAkB,EAAE,OAAO,CAAC,CACpE;aACC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;aAC9B,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IACF,eAAC;AAAD,CAAC,AAzDD,CAA8B,SAAS,GAyDtC","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { DOMUtils } from \"../../services\";\nimport { Tools } from \"../../tools\";\n\nexport class ZeroLine extends Component {\n\ttype = \"zero-line\";\n\n\trender(animate: boolean) {\n\t\tconst axisPosition = this.services.cartesianScales.getRangeAxisPosition({groups: this.configs.groups});\n\t\tconst rangeScale = this.services.cartesianScales.getScaleByPosition(axisPosition);\n\t\t// check the domain\n\t\tconst [\n\t\t\tminDomainValue,\n\t\t\tmaxDomainValue\n\t\t] = rangeScale.domain();\n\n\t\tconst drawZeroLine =\n\t\t\t(minDomainValue > 0 && maxDomainValue < 0) ||\n\t\t\t(minDomainValue < 0 && maxDomainValue > 0);\n\n\t\t// Grab container SVG\n\t\tconst svg = this.getContainerSVG();\n\n\t\t// show zero line only if is necessary, otherwise make sure tto remove zero line if the chart\n\t\t// previously had a domain that went into negatives\n\t\tif (!drawZeroLine) {\n\t\t\t// otherwise if a chart draws a zero line and then the domain change the zero line is still in the DOM\n\t\t\tsvg.selectAll(\"line.domain\").remove();\n\t\t\treturn;\n\t\t}\n\n\t\t// Get x & y position of the line\n\t\tconst [x0, x1] = this.services.cartesianScales.getDomainScale().range();\n\t\tlet yPosition = +rangeScale(0) + 0.5;\n\n\t\t// if scale domain contains NaN, return the first value of the range\n\t\t// this is necessary for the zero line y position that otherwise is NaN\n\t\t// so on the top of the chart while we want it on the bottom\n\t\tif (!yPosition) {\n\t\t\tyPosition = rangeScale.range()[0];\n\t\t}\n\n\t\tconst lineCoordinates = Tools.flipSVGCoordinatesBasedOnOrientation(\n\t\t\t{\n\t\t\t\tx0,\n\t\t\t\tx1,\n\t\t\t\ty0: yPosition,\n\t\t\t\ty1: yPosition\n\t\t\t},\n\t\t\tthis.services.cartesianScales.getOrientation()\n\t\t);\n\n\t\tconst line = DOMUtils.appendOrSelect(svg, \"line.domain\");\n\t\tline.transition(\n\t\t\tthis.services.transitions.getTransition(\"zero-line-update\", animate)\n\t\t)\n\t\t\t.attr(\"y1\", lineCoordinates.y0)\n\t\t\t.attr(\"y2\", lineCoordinates.y1)\n\t\t\t.attr(\"x1\", lineCoordinates.x0)\n\t\t\t.attr(\"x2\", lineCoordinates.x1);\n\t}\n}\n"]}
@@ -1,7 +1,6 @@
1
1
  import { Component } from "../component";
2
2
  import { ChartModelCartesian } from "../../model-cartesian-charts";
3
3
  export declare class ZoomBar extends Component {
4
- protected model: ChartModelCartesian;
5
4
  type: string;
6
5
  MIN_SELECTION_DIFF: number;
7
6
  brushSelector: string;
@@ -10,6 +9,7 @@ export declare class ZoomBar extends Component {
10
9
  brush: import("d3-brush").BrushBehavior<unknown>;
11
10
  xScale: any;
12
11
  yScale: any;
12
+ protected model: ChartModelCartesian;
13
13
  init(): void;
14
14
  render(animate?: boolean): void;
15
15
  addBrushEventListener(zoomDomain: any, axesLeftMargin: any, width: any): void;