@carbon/charts 0.30.5 → 0.30.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.md +14 -8
  3. package/build/demo/data/bar.d.ts +56 -94
  4. package/build/demo/data/bubble.d.ts +58 -13
  5. package/build/demo/data/donut.d.ts +3 -6
  6. package/build/demo/data/line.d.ts +35 -35
  7. package/build/demo/data/pie.d.ts +3 -6
  8. package/build/demo/data/scatter.d.ts +33 -20
  9. package/build/demo/data/step.d.ts +15 -16
  10. package/build/demo/data/time-series-axis.d.ts +12 -48
  11. package/build/src/charts/bar-grouped.d.ts +2 -2
  12. package/build/src/charts/bar-simple.d.ts +2 -4
  13. package/build/src/components/essentials/legend.d.ts +0 -4
  14. package/build/src/components/essentials/tooltip-bar.d.ts +1 -1
  15. package/build/src/components/essentials/tooltip-pie.d.ts +5 -0
  16. package/build/src/components/essentials/tooltip-scatter.d.ts +1 -1
  17. package/build/src/components/graphs/bar-grouped.d.ts +6 -4
  18. package/build/src/components/graphs/bar-simple.d.ts +0 -1
  19. package/build/src/components/graphs/bar-stacked.d.ts +0 -1
  20. package/build/src/components/graphs/bubble.d.ts +0 -1
  21. package/build/src/components/graphs/line.d.ts +3 -1
  22. package/build/src/components/graphs/pie.d.ts +0 -1
  23. package/build/src/components/graphs/scatter.d.ts +0 -1
  24. package/build/src/components/index.d.ts +1 -0
  25. package/build/src/interfaces/axis-scales.d.ts +4 -16
  26. package/build/src/interfaces/charts.d.ts +23 -1
  27. package/build/src/interfaces/enums.d.ts +0 -4
  28. package/build/src/interfaces/events.d.ts +20 -0
  29. package/build/src/model-pie.d.ts +1 -7
  30. package/build/src/model.d.ts +31 -13
  31. package/build/src/services/scales-cartesian.d.ts +11 -3
  32. package/build/src/tools.d.ts +2 -2
  33. package/build/stories/tutorials.stories.d.ts +1 -0
  34. package/bundle.js +1 -1
  35. package/chart.js +2 -2
  36. package/chart.js.map +1 -1
  37. package/charts/bar-grouped.d.ts +2 -2
  38. package/charts/bar-grouped.js.map +1 -1
  39. package/charts/bar-simple.d.ts +2 -4
  40. package/charts/bar-simple.js +0 -2
  41. package/charts/bar-simple.js.map +1 -1
  42. package/charts/donut.js +2 -2
  43. package/charts/donut.js.map +1 -1
  44. package/charts/pie.js +2 -2
  45. package/charts/pie.js.map +1 -1
  46. package/components/axes/grid.js +12 -19
  47. package/components/axes/grid.js.map +1 -1
  48. package/components/component.js +1 -1
  49. package/components/component.js.map +1 -1
  50. package/components/essentials/legend.d.ts +0 -4
  51. package/components/essentials/legend.js +8 -22
  52. package/components/essentials/legend.js.map +1 -1
  53. package/components/essentials/title.js +4 -4
  54. package/components/essentials/title.js.map +1 -1
  55. package/components/essentials/tooltip-bar.d.ts +1 -1
  56. package/components/essentials/tooltip-bar.js +13 -5
  57. package/components/essentials/tooltip-bar.js.map +1 -1
  58. package/components/essentials/tooltip-pie.d.ts +5 -0
  59. package/components/essentials/tooltip-pie.js +40 -0
  60. package/components/essentials/tooltip-pie.js.map +1 -0
  61. package/components/essentials/tooltip-scatter.d.ts +1 -1
  62. package/components/essentials/tooltip-scatter.js +8 -6
  63. package/components/essentials/tooltip-scatter.js.map +1 -1
  64. package/components/essentials/tooltip.js +14 -17
  65. package/components/essentials/tooltip.js.map +1 -1
  66. package/components/graphs/bar-grouped.d.ts +6 -4
  67. package/components/graphs/bar-grouped.js +60 -32
  68. package/components/graphs/bar-grouped.js.map +1 -1
  69. package/components/graphs/bar-simple.d.ts +0 -1
  70. package/components/graphs/bar-simple.js +12 -30
  71. package/components/graphs/bar-simple.js.map +1 -1
  72. package/components/graphs/bar-stacked.d.ts +0 -1
  73. package/components/graphs/bar-stacked.js +26 -108
  74. package/components/graphs/bar-stacked.js.map +1 -1
  75. package/components/graphs/bar.js.map +1 -1
  76. package/components/graphs/bubble.d.ts +0 -1
  77. package/components/graphs/bubble.js +16 -20
  78. package/components/graphs/bubble.js.map +1 -1
  79. package/components/graphs/donut.js +1 -1
  80. package/components/graphs/donut.js.map +1 -1
  81. package/components/graphs/line.d.ts +3 -1
  82. package/components/graphs/line.js +41 -30
  83. package/components/graphs/line.js.map +1 -1
  84. package/components/graphs/pie.d.ts +0 -1
  85. package/components/graphs/pie.js +13 -20
  86. package/components/graphs/pie.js.map +1 -1
  87. package/components/graphs/scatter.d.ts +0 -1
  88. package/components/graphs/scatter.js +26 -41
  89. package/components/graphs/scatter.js.map +1 -1
  90. package/components/index.d.ts +1 -0
  91. package/components/index.js +1 -0
  92. package/components/index.js.map +1 -1
  93. package/configuration.js +7 -0
  94. package/configuration.js.map +1 -1
  95. package/demo/data/bar.d.ts +56 -94
  96. package/demo/data/bar.js +106 -271
  97. package/demo/data/bar.js.map +1 -1
  98. package/demo/data/bubble.d.ts +58 -13
  99. package/demo/data/bubble.js +74 -174
  100. package/demo/data/bubble.js.map +1 -1
  101. package/demo/data/bundle.js +1 -1
  102. package/demo/data/donut.d.ts +3 -6
  103. package/demo/data/index.js +22 -4
  104. package/demo/data/index.js.map +1 -1
  105. package/demo/data/line.d.ts +35 -35
  106. package/demo/data/line.js +70 -196
  107. package/demo/data/line.js.map +1 -1
  108. package/demo/data/pie.d.ts +3 -6
  109. package/demo/data/pie.js +8 -10
  110. package/demo/data/pie.js.map +1 -1
  111. package/demo/data/scatter.d.ts +33 -20
  112. package/demo/data/scatter.js +50 -68
  113. package/demo/data/scatter.js.map +1 -1
  114. package/demo/data/step.d.ts +15 -16
  115. package/demo/data/time-series-axis.d.ts +12 -48
  116. package/demo/data/time-series-axis.js +34 -46
  117. package/demo/data/time-series-axis.js.map +1 -1
  118. package/demo/styles.css +28 -0
  119. package/demo/styles.css.map +1 -1
  120. package/demo/styles.min.css +1 -1
  121. package/demo/styles.min.css.map +1 -1
  122. package/demo/tsconfig.tsbuildinfo +38 -37
  123. package/interfaces/axis-scales.d.ts +4 -16
  124. package/interfaces/axis-scales.js.map +1 -1
  125. package/interfaces/charts.d.ts +23 -1
  126. package/interfaces/charts.js.map +1 -1
  127. package/interfaces/enums.d.ts +0 -4
  128. package/interfaces/enums.js +0 -5
  129. package/interfaces/enums.js.map +1 -1
  130. package/interfaces/events.d.ts +20 -0
  131. package/interfaces/events.js +23 -0
  132. package/interfaces/events.js.map +1 -1
  133. package/model-pie.d.ts +1 -7
  134. package/model-pie.js +2 -107
  135. package/model-pie.js.map +1 -1
  136. package/model.d.ts +31 -13
  137. package/model.js +200 -76
  138. package/model.js.map +1 -1
  139. package/package.json +3 -1
  140. package/services/essentials/dom-utils.js +3 -2
  141. package/services/essentials/dom-utils.js.map +1 -1
  142. package/services/scales-cartesian.d.ts +11 -3
  143. package/services/scales-cartesian.js +104 -122
  144. package/services/scales-cartesian.js.map +1 -1
  145. package/tools.d.ts +2 -2
  146. package/tools.js +23 -2
  147. package/tools.js.map +1 -1
  148. package/tsconfig.tsbuildinfo +87 -88
  149. package/build/src/model-simple-bar.d.ts +0 -11
  150. package/model-simple-bar.d.ts +0 -11
  151. package/model-simple-bar.js +0 -88
  152. package/model-simple-bar.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"bar-grouped.js","sourceRoot":"","sources":["bar-grouped.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EACN,qBAAqB,EACrB,MAAM,EACN,KAAK,EACL,YAAY,EACZ,MAAM,kBAAkB,CAAC;AAE1B,aAAa;AACb,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAa,SAAS,EAAE,MAAM,UAAU,CAAC;AAEhD;IAAgC,8BAAG;IAAnC;QAAA,qEA0NC;QAzNA,UAAI,GAAG,aAAa,CAAC;QAwIrB,wDAAwD;QACxD,yBAAmB,GAAG,UAAC,KAAkB;YAChC,IAAA,4CAAc,CAAkB;YAExC,KAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC;iBAC/B,UAAU,CAAC,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;iBACvE,IAAI,CAAC,SAAS,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,YAAY,KAAK,cAAc,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAA5D,CAA4D,CAAC,CAAC;QACtF,CAAC,CAAA;QAED,4BAA4B;QAC5B,0BAAoB,GAAG,UAAC,KAAkB;YACzC,KAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC;iBAC/B,UAAU,CAAC,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;iBAC1E,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACtB,CAAC,CAAA;;IAmEF,CAAC;IArNA,yBAAI,GAAJ;QACC,IAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAE5C,iDAAiD;QACjD,cAAc,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAEpF,gDAAgD;QAChD,cAAc,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACzF,CAAC;IAED,kCAAa,GAAb;QACS,IAAA,+CAAQ,CAAiC;QACjD,IAAM,OAAO,GAAG,CAAC,CAAC;QAElB,OAAO,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACjF,CAAC;IAED,kCAAa,GAAb;QACS,IAAA,+CAAQ,CAAiC;QAEjD,IAAI,CAAC,UAAU,GAAG,SAAS,EAAE;aAC3B,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAA,OAAO,IAAI,OAAA,OAAO,CAAC,KAAK,EAAb,CAAa,CAAC,CAAC;aAC9C,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,oEAAoE;IACpE,gCAAW,GAAX;QACS,IAAA,+CAAQ,CAAiC;QACjD,IAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE,CAAC;QAEnE,OAAO,IAAI,CAAC,GAAG,CACd,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,EACxC,iBAAM,WAAW,WAAE,CACnB,CAAC;IACH,CAAC;IAED,2BAAM,GAAN,UAAO,OAAgB;QAAvB,iBAmFC;QAlFA,uDAAuD;QACvD,IAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAEhD,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,qBAAqB;QACrB,IAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAEnC,4BAA4B;QAC5B,IAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC;aACvC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAE3B,4CAA4C;QAC5C,SAAS,CAAC,IAAI,EAAE;aACd,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;aAClB,MAAM,EAAE,CAAC;QAEX,gDAAgD;QAChD,IAAM,cAAc,GAAG,SAAS,CAAC,KAAK,EAAE;aACtC,MAAM,CAAC,GAAG,CAAC;aACV,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;aACrB,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC;aACzB,IAAI,CAAC,iBAAiB,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,EAAD,CAAC,CAAC,CAAC;QAEnC,0BAA0B;QAC1B,IAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC;aAC1C,IAAI,CAAC,WAAW,EAAE,UAAC,CAAC,EAAE,CAAC;YACvB,IAAM,UAAU,GAAG,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACtE,IAAM,WAAW,GAAG,UAAU,GAAG,KAAI,CAAC,aAAa,EAAE,GAAG,CAAC,GAAG,KAAI,CAAC,WAAW,EAAE,CAAC;YAE/E,IAAI,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE,KAAK,qBAAqB,CAAC,QAAQ,EAAE;gBACtF,OAAO,eAAa,WAAW,SAAM,CAAC;aACtC;iBAAM;gBACN,qDAAqD;gBACrD,OAAO,kBAAgB,WAAW,MAAG,CAAC;aACtC;QACF,CAAC,CAAC;aACD,SAAS,CAAC,UAAU,CAAC;aACrB,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,KAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAhC,CAAgC,CAAC,CAAC;QAEnD,wCAAwC;QACxC,IAAI,CAAC,IAAI,EAAE;aACT,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;aAClB,MAAM,EAAE,CAAC;QAEX,6CAA6C;QAC7C,IAAM,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE;aAC5B,MAAM,CAAC,MAAM,CAAC;aACd,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAErB,uCAAuC;QACvC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;aACnB,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;aACpB,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;aAChF,IAAI,CAAC,MAAM,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAlD,CAAkD,CAAC;aACrE,IAAI,CAAC,GAAG,EAAE,UAAA,CAAC;YACX;;;;;eAKG;YACH,IAAM,OAAO,GAAG,KAAI,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;YAChD,IAAM,QAAQ,GAAG,KAAI,CAAC,WAAW,EAAE,CAAC;YACpC,IAAM,EAAE,GAAG,OAAO,GAAG,QAAQ,GAAG,CAAC,CAAC;YAClC,IAAM,EAAE,GAAG,OAAO,GAAG,QAAQ,GAAG,CAAC,CAAC;YAClC,IAAM,EAAE,GAAG,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YAC1D,IAAM,EAAE,GAAG,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAEhE,OAAO,KAAK,CAAC,qBAAqB,CACjC,EAAE,EAAE,IAAA,EAAE,EAAE,IAAA,EAAE,EAAE,IAAA,EAAE,EAAE,IAAA,EAAE,EAClB,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,cAAc,EAAE,CAC9C,CAAC;QACH,CAAC,CAAC;aACD,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YACnB,OAAO;aACN,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,eAAe,CAAC;aACnC,IAAI,CAAC,sBAAsB,EAAE,KAAK,CAAC;aACnC,IAAI,CAAC,YAAY,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,EAAP,CAAO,CAAC,CAAC;QAEnC,wCAAwC;QACxC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC1B,CAAC;IAED,qDAAqD;IACrD,0CAAqB,GAArB,UAAsB,CAAC,EAAE,KAAK;QACrB,IAAA,+CAAQ,CAAiC;QAEjD,OAAO,QAAQ,CAAC,GAAG,CAAC,UAAA,OAAO,IAAI,OAAA,CAAC;YAC/B,KAAK,EAAE,CAAC;YACR,YAAY,EAAE,OAAO,CAAC,KAAK;YAC3B,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;SAClF,CAAC,EAJ6B,CAI7B,CAAC,CAAC;IACL,CAAC;IAkBD,sCAAiB,GAAjB;QACC,IAAM,IAAI,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC;aAC/B,EAAE,CAAC,WAAW,EAAE,UAAS,KAAK;YAC9B,IAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAEpC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,qCAAqC,CAAC,CAAC;iBACvG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAE1E,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE;gBAC5D,OAAO,EAAE,cAAc;gBACvB,KAAK,OAAA;aACL,CAAC,CAAC;YAEH,eAAe;YACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,EAAE;gBAClD,cAAc,gBAAA;gBACd,IAAI,EAAE,YAAY,CAAC,SAAS;aAC5B,CAAC,CAAC;QACJ,CAAC,CAAC;aACD,EAAE,CAAC,WAAW,EAAE,UAAS,KAAK;YAC9B,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE;gBAC5D,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;gBACrB,KAAK,OAAA;aACL,CAAC,CAAC;QACJ,CAAC,CAAC;aACD,EAAE,CAAC,OAAO,EAAE,UAAS,KAAK;YAC1B,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE;gBACxD,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;gBACrB,KAAK,OAAA;aACL,CAAC,CAAC;QACJ,CAAC,CAAC;aACD,EAAE,CAAC,UAAU,EAAE,UAAS,KAAK;YAC7B,IAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACpC,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEzC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,oCAAoC,CAAC,CAAC;iBACtG,IAAI,CAAC,MAAM,EAAE,UAAC,CAAM,IAAK,OAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAlD,CAAkD,CAAC,CAAC;YAE/E,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE;gBAC3D,OAAO,EAAE,cAAc;gBACvB,KAAK,OAAA;aACL,CAAC,CAAC;YAEH,eAAe;YACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,EAAE,EAAE,cAAc,gBAAA,EAAE,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC;IAED,4BAAO,GAAP;QACC,yBAAyB;QACzB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC;aAC/B,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC;aACrB,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC;aACrB,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAEvB,0BAA0B;QAC1B,IAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC5C,cAAc,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACvF,cAAc,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC5F,CAAC;IACF,iBAAC;AAAD,CAAC,AA1ND,CAAgC,GAAG,GA0NlC","sourcesContent":["// Internal Imports\nimport { Bar } from \"./bar\";\nimport { Tools } from \"../../tools\";\nimport {\n\tCartesianOrientations,\n\tEvents,\n\tRoles,\n\tTooltipTypes\n} from \"../../interfaces\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\nimport { color } from \"d3-color\";\nimport { ScaleBand, scaleBand } from \"d3-scale\";\n\nexport class GroupedBar extends Bar {\n\ttype = \"grouped-bar\";\n\n\tgroupScale: ScaleBand<any>;\n\n\tinit() {\n\t\tconst eventsFragment = this.services.events;\n\n\t\t// Highlight correct circle on legend item hovers\n\t\teventsFragment.addEventListener(Events.Legend.ITEM_HOVER, this.handleLegendOnHover);\n\n\t\t// Un-highlight circles on legend item mouseouts\n\t\teventsFragment.addEventListener(Events.Legend.ITEM_MOUSEOUT, this.handleLegendMouseOut);\n\t}\n\n\tgetGroupWidth() {\n\t\tconst { datasets } = this.model.getDisplayData();\n\t\tconst padding = 5;\n\n\t\treturn datasets.length * this.getBarWidth() + (padding * (datasets.length - 1));\n\t}\n\n\tsetGroupScale() {\n\t\tconst { datasets } = this.model.getDisplayData();\n\n\t\tthis.groupScale = scaleBand()\n\t\t\t.domain(datasets.map(dataset => dataset.label))\n\t\t\t.rangeRound([0, this.getGroupWidth()]);\n\t}\n\n\t// Gets the correct width for bars based on options & configurations\n\tgetBarWidth() {\n\t\tconst { datasets } = this.model.getDisplayData();\n\t\tconst domainScale = this.services.cartesianScales.getDomainScale();\n\n\t\treturn Math.min(\n\t\t\tdomainScale.step() / 2 / datasets.length,\n\t\t\tsuper.getBarWidth()\n\t\t);\n\t}\n\n\trender(animate: boolean) {\n\t\t// Chart options mixed with the internal configurations\n\t\tconst displayData = this.model.getDisplayData();\n\n\t\tthis.setGroupScale();\n\n\t\t// Grab container SVG\n\t\tconst svg = this.getContainerSVG();\n\n\t\t// Update data on bar groups\n\t\tconst barGroups = svg.selectAll(\"g.bars\")\n\t\t\t.data(displayData.labels);\n\n\t\t// Remove dot groups that need to be removed\n\t\tbarGroups.exit()\n\t\t\t.attr(\"opacity\", 0)\n\t\t\t.remove();\n\n\t\t// Add the bar groups that need to be introduced\n\t\tconst barGroupsEnter = barGroups.enter()\n\t\t\t.append(\"g\")\n\t\t\t\t.classed(\"bars\", true)\n\t\t\t\t.attr(\"role\", Roles.GROUP)\n\t\t\t\t.attr(\"aria-labelledby\", d => d);\n\n\t\t// Update data on all bars\n\t\tconst bars = barGroupsEnter.merge(barGroups)\n\t\t\t.attr(\"transform\", (d, i) => {\n\t\t\t\tconst scaleValue = this.services.cartesianScales.getDomainValue(d, i);\n\t\t\t\tconst translateBy = scaleValue - this.getGroupWidth() / 2 + this.getBarWidth();\n\n\t\t\t\tif (this.services.cartesianScales.getOrientation() === CartesianOrientations.VERTICAL) {\n\t\t\t\t\treturn `translate(${translateBy}, 0)`;\n\t\t\t\t} else {\n\t\t\t\t\t// translate in the y direction for horizontal groups\n\t\t\t\t\treturn `translate(0, ${translateBy})`;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.selectAll(\"path.bar\")\n\t\t\t.data((d, i) => this.addLabelsToDataPoints(d, i));\n\n\t\t// Remove bars that are no longer needed\n\t\tbars.exit()\n\t\t\t.attr(\"opacity\", 0)\n\t\t\t.remove();\n\n\t\t// Add the circles that need to be introduced\n\t\tconst barsEnter = bars.enter()\n\t\t\t.append(\"path\")\n\t\t\t.attr(\"opacity\", 0);\n\n\t\t// code for vertical grouped bar charts\n\t\tbarsEnter.merge(bars)\n\t\t\t.classed(\"bar\", true)\n\t\t\t.transition(this.services.transitions.getTransition(\"bar-update-enter\", animate))\n\t\t\t.attr(\"fill\", d => this.model.getFillScale()[d.datasetLabel](d.label))\n\t\t\t.attr(\"d\", d => {\n\t\t\t\t/*\n\t\t\t\t * Orientation support for horizontal/vertical bar charts\n\t\t\t\t * Determine coordinates needed for a vertical set of paths\n\t\t\t\t * to draw the bars needed, and pass those coordinates down to\n\t\t\t\t * generateSVGPathString() to decide whether it needs to flip them\n\t\t\t\t */\n\t\t\t\tconst centerX = this.groupScale(d.datasetLabel);\n\t\t\t\tconst barWidth = this.getBarWidth();\n\t\t\t\tconst x0 = centerX - barWidth / 2;\n\t\t\t\tconst x1 = centerX + barWidth / 2;\n\t\t\t\tconst y0 = this.services.cartesianScales.getRangeValue(0);\n\t\t\t\tconst y1 = this.services.cartesianScales.getRangeValue(d.value);\n\n\t\t\t\treturn Tools.generateSVGPathString(\n\t\t\t\t\t{ x0, x1, y0, y1 },\n\t\t\t\t\tthis.services.cartesianScales.getOrientation()\n\t\t\t\t);\n\t\t\t})\n\t\t\t.attr(\"opacity\", 1)\n\t\t\t// a11y\n\t\t\t.attr(\"role\", Roles.GRAPHICS_SYMBOL)\n\t\t\t.attr(\"aria-roledescription\", \"bar\")\n\t\t\t.attr(\"aria-label\", d => d.value);\n\n\t\t// Add event listeners to elements drawn\n\t\tthis.addEventListeners();\n\t}\n\n\t// TODO - This method could be re-used in more graphs\n\taddLabelsToDataPoints(d, index) {\n\t\tconst { datasets } = this.model.getDisplayData();\n\n\t\treturn datasets.map(dataset => ({\n\t\t\tlabel: d,\n\t\t\tdatasetLabel: dataset.label,\n\t\t\tvalue: dataset.data[index].value ? dataset.data[index].value : dataset.data[index]\n\t\t}));\n\t}\n\n\t// Highlight elements that match the hovered legend item\n\thandleLegendOnHover = (event: CustomEvent) => {\n\t\tconst { hoveredElement } = event.detail;\n\n\t\tthis.parent.selectAll(\"path.bar\")\n\t\t\t.transition(this.services.transitions.getTransition(\"legend-hover-bar\"))\n\t\t\t.attr(\"opacity\", d => (d.datasetLabel !== hoveredElement.datum()[\"key\"]) ? 0.3 : 1);\n\t}\n\n\t// Un-highlight all elements\n\thandleLegendMouseOut = (event: CustomEvent) => {\n\t\tthis.parent.selectAll(\"path.bar\")\n\t\t\t.transition(this.services.transitions.getTransition(\"legend-mouseout-bar\"))\n\t\t\t.attr(\"opacity\", 1);\n\t}\n\n\taddEventListeners() {\n\t\tconst self = this;\n\t\tthis.parent.selectAll(\"path.bar\")\n\t\t\t.on(\"mouseover\", function(datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\n\t\t\t\thoveredElement.transition(self.services.transitions.getTransition(\"graph_element_mouseover_fill_update\"))\n\t\t\t\t\t.attr(\"fill\", color(hoveredElement.attr(\"fill\")).darker(0.7).toString());\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOVER, {\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum\n\t\t\t\t});\n\n\t\t\t\t// Show tooltip\n\t\t\t\tself.services.events.dispatchEvent(\"show-tooltip\", {\n\t\t\t\t\thoveredElement,\n\t\t\t\t\ttype: TooltipTypes.DATAPOINT\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"mousemove\", function(datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEMOVE, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"click\", function(datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_CLICK, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"mouseout\", function(datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\thoveredElement.classed(\"hovered\", false);\n\n\t\t\t\thoveredElement.transition(self.services.transitions.getTransition(\"graph_element_mouseout_fill_update\"))\n\t\t\t\t\t.attr(\"fill\", (d: any) => self.model.getFillScale()[d.datasetLabel](d.label));\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOUT, {\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum\n\t\t\t\t});\n\n\t\t\t\t// Hide tooltip\n\t\t\t\tself.services.events.dispatchEvent(\"hide-tooltip\", { hoveredElement });\n\t\t\t});\n\t}\n\n\tdestroy() {\n\t\t// Remove event listeners\n\t\tthis.parent.selectAll(\"path.bar\")\n\t\t\t.on(\"mouseover\", null)\n\t\t\t.on(\"mousemove\", null)\n\t\t\t.on(\"mouseout\", null);\n\n\t\t// Remove legend listeners\n\t\tconst eventsFragment = this.services.events;\n\t\teventsFragment.removeEventListener(Events.Legend.ITEM_HOVER, this.handleLegendOnHover);\n\t\teventsFragment.removeEventListener(Events.Legend.ITEM_MOUSEOUT, this.handleLegendMouseOut);\n\t}\n}\n"]}
1
+ {"version":3,"file":"bar-grouped.js","sourceRoot":"","sources":["bar-grouped.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Bar } from \"./bar\";\nimport { Tools } from \"../../tools\";\nimport {\n\tCartesianOrientations,\n\tEvents,\n\tRoles,\n\tTooltipTypes\n} from \"../../interfaces\";\n\n// D3 Imports\nimport { map } from \"d3-collection\";\nimport { select } from \"d3-selection\";\nimport { color } from \"d3-color\";\nimport { ScaleBand, scaleBand } from \"d3-scale\";\n\nexport class GroupedBar extends Bar {\n\ttype = \"grouped-bar\";\n\n\tgroupScale: ScaleBand<any>;\n\n\tpadding = 5;\n\n\tinit() {\n\t\tconst eventsFragment = this.services.events;\n\n\t\t// Highlight correct circle on legend item hovers\n\t\teventsFragment.addEventListener(Events.Legend.ITEM_HOVER, this.handleLegendOnHover);\n\n\t\t// Un-highlight circles on legend item mouseouts\n\t\teventsFragment.addEventListener(Events.Legend.ITEM_MOUSEOUT, this.handleLegendMouseOut);\n\t}\n\n\tprotected getDataCorrespondingToLabel(label: string) {\n\t\tconst displayData = this.model.getDisplayData();\n\t\tconst domainIdentifier = this.services.cartesianScales.getDomainIdentifier();\n\n\t\treturn displayData.filter(datum => datum[domainIdentifier] === label);\n\t}\n\n\tprotected getGroupWidth() {\n\t\tconst numOfActiveDataGroups = this.model.getActiveDataGroupNames().length;\n\t\tconst totalGroupPadding = this.getTotalGroupPadding();\n\n\t\treturn this.getBarWidth() * numOfActiveDataGroups + totalGroupPadding;\n\t}\n\n\n\tprotected getTotalGroupPadding() {\n\t\tconst numOfActiveDataGroups = this.model.getActiveDataGroupNames().length;\n\n\t\tif (numOfActiveDataGroups === 1) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst domainScale = this.services.cartesianScales.getDomainScale();\n\t\tconst padding = Math.min(\n\t\t\t5,\n\t\t\t5 * (domainScale.step() / 70)\n\t\t);\n\n\t\treturn padding * (numOfActiveDataGroups - 1);\n\t}\n\n\t// Gets the correct width for bars based on options & configurations\n\tprotected getBarWidth() {\n\t\tconst options = this.model.getOptions();\n\t\tconst providedWidth = Tools.getProperty(options, \"bars\", \"width\");\n\t\tconst providedMaxWidth = Tools.getProperty(options, \"bars\", \"maxWidth\");\n\n\t\t// If there's a provided width, compare with maxWidth and\n\t\t// Determine which to return\n\t\tif (providedWidth !== null) {\n\t\t\tif (providedMaxWidth === null) {\n\t\t\t\treturn providedWidth;\n\t\t\t} else if (providedWidth <= providedMaxWidth) {\n\t\t\t\treturn providedWidth;\n\t\t\t}\n\t\t}\n\n\t\tconst numOfActiveDataGroups = this.model.getActiveDataGroupNames().length;\n\t\tconst totalGroupPadding = this.getTotalGroupPadding();\n\n\t\tconst domainScale = this.services.cartesianScales.getDomainScale();\n\t\treturn Math.min(\n\t\t\tprovidedMaxWidth,\n\t\t\t(domainScale.step() - totalGroupPadding) / numOfActiveDataGroups\n\t\t);\n\t}\n\n\tprotected setGroupScale() {\n\t\tthis.groupScale = scaleBand()\n\t\t\t.domain(this.model.getActiveDataGroupNames())\n\t\t\t.rangeRound([0, this.getGroupWidth()]);\n\t}\n\n\trender(animate: boolean) {\n\t\t// Chart options mixed with the internal configurations\n\t\tconst displayData = this.model.getDisplayData();\n\n\t\tconst options = this.model.getOptions();\n\t\tconst { groupMapsTo } = options.data;\n\t\tconst domainIdentifier = this.services.cartesianScales.getDomainIdentifier();\n\n\t\t// Get unique labels\n\t\tthis.setGroupScale();\n\n\t\t// Grab container SVG\n\t\tconst svg = this.getContainerSVG();\n\n\t\tconst allDataLabels = map(displayData, datum => datum[domainIdentifier]).keys();\n\n\t\t// Update data on bar groups\n\t\tconst barGroups = svg.selectAll(\"g.bars\")\n\t\t\t.data(allDataLabels, label => label);\n\n\t\t// Remove dot groups that need to be removed\n\t\tbarGroups.exit()\n\t\t\t.attr(\"opacity\", 0)\n\t\t\t.remove();\n\n\t\t// Add the bar groups that need to be introduced\n\t\tconst barGroupsEnter = barGroups.enter()\n\t\t\t.append(\"g\")\n\t\t\t\t.classed(\"bars\", true)\n\t\t\t\t.attr(\"role\", Roles.GROUP)\n\t\t\t\t.attr(\"aria-labelledby\", d => d);\n\n\t\t// Update data on all bars\n\t\tconst bars = barGroupsEnter.merge(barGroups)\n\t\t\t.attr(\"transform\", (label, i) => {\n\t\t\t\tconst scaleValue = this.services.cartesianScales.getDomainValue(label, i);\n\t\t\t\tconst translateBy = scaleValue - this.getGroupWidth() / 2;\n\t\t\t\t// const translateBy = scaleValue - this.getGroupWidth(null) / 2 + this.getBarWidth(null);\n\n\t\t\t\tif (this.services.cartesianScales.getOrientation() === CartesianOrientations.VERTICAL) {\n\t\t\t\t\treturn `translate(${translateBy}, 0)`;\n\t\t\t\t} else {\n\t\t\t\t\t// translate in the y direction for horizontal groups\n\t\t\t\t\treturn `translate(0, ${translateBy})`;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.selectAll(\"path.bar\")\n\t\t\t.data(label => this.getDataCorrespondingToLabel(label));\n\n\t\t// Remove bars that are no longer needed\n\t\tbars.exit()\n\t\t\t.attr(\"opacity\", 0)\n\t\t\t.remove();\n\n\t\t// Add the circles that need to be introduced\n\t\tconst barsEnter = bars.enter()\n\t\t\t.append(\"path\")\n\t\t\t.attr(\"opacity\", 0);\n\n\t\t// code for vertical grouped bar charts\n\t\tbarsEnter.merge(bars)\n\t\t\t.classed(\"bar\", true)\n\t\t\t.transition(this.services.transitions.getTransition(\"bar-update-enter\", animate))\n\t\t\t.attr(\"fill\", d => this.model.getFillColor(d[groupMapsTo]))\n\t\t\t.attr(\"d\", d => {\n\t\t\t\t/*\n\t\t\t\t * Orientation support for horizontal/vertical bar charts\n\t\t\t\t * Determine coordinates needed for a vertical set of paths\n\t\t\t\t * to draw the bars needed, and pass those coordinates down to\n\t\t\t\t * generateSVGPathString() to decide whether it needs to flip them\n\t\t\t\t */\n\t\t\t\tconst startX = this.groupScale(d[groupMapsTo]);\n\t\t\t\tconst barWidth = this.getBarWidth();\n\n\t\t\t\tconst x0 = startX;\n\t\t\t\tconst x1 = startX + barWidth;\n\t\t\t\tconst y0 = this.services.cartesianScales.getRangeValue(0);\n\t\t\t\tconst y1 = this.services.cartesianScales.getRangeValue(d.value);\n\n\t\t\t\treturn Tools.generateSVGPathString(\n\t\t\t\t\t{ x0, x1, y0, y1 },\n\t\t\t\t\tthis.services.cartesianScales.getOrientation()\n\t\t\t\t);\n\t\t\t})\n\t\t\t.attr(\"opacity\", 1)\n\t\t\t// a11y\n\t\t\t.attr(\"role\", Roles.GRAPHICS_SYMBOL)\n\t\t\t.attr(\"aria-roledescription\", \"bar\")\n\t\t\t.attr(\"aria-label\", d => d.value);\n\n\t\t// Add event listeners to elements drawn\n\t\tthis.addEventListeners();\n\t}\n\n\t// Highlight elements that match the hovered legend item\n\thandleLegendOnHover = (event: CustomEvent) => {\n\t\tconst { hoveredElement } = event.detail;\n\n\t\tconst { groupMapsTo } = this.model.getOptions().data;\n\n\t\tthis.parent.selectAll(\"path.bar\")\n\t\t\t.transition(this.services.transitions.getTransition(\"legend-hover-bar\"))\n\t\t\t.attr(\"opacity\", d => (d[groupMapsTo] !== hoveredElement.datum()[\"name\"]) ? 0.3 : 1);\n\t}\n\n\t// Un-highlight all elements\n\thandleLegendMouseOut = (event: CustomEvent) => {\n\t\tthis.parent.selectAll(\"path.bar\")\n\t\t\t.transition(this.services.transitions.getTransition(\"legend-mouseout-bar\"))\n\t\t\t.attr(\"opacity\", 1);\n\t}\n\n\taddEventListeners() {\n\t\tconst self = this;\n\t\tthis.parent.selectAll(\"path.bar\")\n\t\t\t.on(\"mouseover\", function(datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\n\t\t\t\thoveredElement.transition(self.services.transitions.getTransition(\"graph_element_mouseover_fill_update\"))\n\t\t\t\t\t.attr(\"fill\", color(hoveredElement.attr(\"fill\")).darker(0.7).toString());\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOVER, {\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum\n\t\t\t\t});\n\n\t\t\t\t// Show tooltip\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\thoveredElement,\n\t\t\t\t\ttype: TooltipTypes.DATAPOINT\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"mousemove\", function(datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEMOVE, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"click\", function(datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_CLICK, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"mouseout\", function(datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\thoveredElement.classed(\"hovered\", false);\n\n\t\t\t\tconst { groupMapsTo } = self.model.getOptions().data;\n\t\t\t\thoveredElement.transition(self.services.transitions.getTransition(\"graph_element_mouseout_fill_update\"))\n\t\t\t\t\t.attr(\"fill\", (d: any) => self.model.getFillColor(d[groupMapsTo]));\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOUT, {\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum\n\t\t\t\t});\n\n\t\t\t\t// Hide tooltip\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE, { hoveredElement });\n\t\t\t});\n\t}\n\n\tdestroy() {\n\t\t// Remove event listeners\n\t\tthis.parent.selectAll(\"path.bar\")\n\t\t\t.on(\"mouseover\", null)\n\t\t\t.on(\"mousemove\", null)\n\t\t\t.on(\"mouseout\", null);\n\n\t\t// Remove legend listeners\n\t\tconst eventsFragment = this.services.events;\n\t\teventsFragment.removeEventListener(Events.Legend.ITEM_HOVER, this.handleLegendOnHover);\n\t\teventsFragment.removeEventListener(Events.Legend.ITEM_MOUSEOUT, this.handleLegendMouseOut);\n\t}\n}\n"]}
@@ -5,7 +5,6 @@ export declare class SimpleBar extends Bar {
5
5
  render(animate: boolean): void;
6
6
  handleLegendOnHover: (event: CustomEvent<any>) => void;
7
7
  handleLegendMouseOut: (event: CustomEvent<any>) => void;
8
- addLabelsToDataPoints(d: any, index: any): any;
9
8
  addEventListeners(): void;
10
9
  destroy(): void;
11
10
  }
@@ -25,9 +25,10 @@ var SimpleBar = /** @class */ (function (_super) {
25
25
  _this.type = "simple-bar";
26
26
  _this.handleLegendOnHover = function (event) {
27
27
  var hoveredElement = event.detail.hoveredElement;
28
+ var groupMapsTo = _this.model.getOptions().data.groupMapsTo;
28
29
  _this.parent.selectAll("path.bar")
29
30
  .transition(_this.services.transitions.getTransition("legend-hover-simple-bar"))
30
- .attr("opacity", function (d) { return (d.label !== hoveredElement.datum()["key"]) ? 0.3 : 1; });
31
+ .attr("opacity", function (d) { return (d[groupMapsTo] !== hoveredElement.datum()["name"]) ? 0.3 : 1; });
31
32
  };
32
33
  _this.handleLegendMouseOut = function (event) {
33
34
  _this.parent.selectAll("path.bar")
@@ -45,24 +46,13 @@ var SimpleBar = /** @class */ (function (_super) {
45
46
  };
46
47
  SimpleBar.prototype.render = function (animate) {
47
48
  var _this = this;
49
+ var options = this.model.getOptions();
50
+ var groupMapsTo = options.data.groupMapsTo;
48
51
  // Grab container SVG
49
52
  var svg = this.getContainerSVG();
50
- // Update data on bar groups
51
- var barGroups = svg.selectAll("g.bars")
52
- .data(this.model.getDisplayData().datasets, function (dataset) { return dataset.label; });
53
- // Remove dot groups that need to be removed
54
- barGroups.exit()
55
- .attr("opacity", 0)
56
- .remove();
57
- // Add the bar groups that need to be introduced
58
- var barGroupsEnter = barGroups.enter()
59
- .append("g")
60
- .classed("bars", true)
61
- .attr("role", Roles.GROUP);
62
53
  // Update data on all bars
63
- var bars = barGroupsEnter.merge(barGroups)
64
- .selectAll("path.bar")
65
- .data(function (d, i) { return _this.addLabelsToDataPoints(d, i); }, function (d) { return d.label; });
54
+ var bars = svg.selectAll("path.bar")
55
+ .data(this.model.getDisplayData(), function (datum) { return datum[groupMapsTo]; });
66
56
  // Remove bars that are no longer needed
67
57
  bars.exit()
68
58
  .attr("opacity", 0)
@@ -75,7 +65,7 @@ var SimpleBar = /** @class */ (function (_super) {
75
65
  .classed("bar", true)
76
66
  .attr("width", this.getBarWidth.bind(this))
77
67
  .transition(this.services.transitions.getTransition("bar-update-enter", animate))
78
- .attr("fill", function (d) { return _this.model.getFillScale()(d.label); })
68
+ .attr("fill", function (d) { return _this.model.getFillColor(d[groupMapsTo]); })
79
69
  .attr("d", function (d, i) {
80
70
  /*
81
71
  * Orientation support for horizontal/vertical bar charts
@@ -98,17 +88,9 @@ var SimpleBar = /** @class */ (function (_super) {
98
88
  // Add event listeners to elements drawn
99
89
  this.addEventListeners();
100
90
  };
101
- // TODO - This method could be re-used in more graphs
102
- SimpleBar.prototype.addLabelsToDataPoints = function (d, index) {
103
- var labels = this.model.getDisplayData().labels;
104
- return d.data.map(function (datum, i) { return ({
105
- date: datum.date,
106
- label: labels[i],
107
- datasetLabel: d.label,
108
- value: isNaN(datum) ? datum.value : datum
109
- }); });
110
- };
111
91
  SimpleBar.prototype.addEventListeners = function () {
92
+ var options = this.model.getOptions();
93
+ var groupMapsTo = options.data.groupMapsTo;
112
94
  var self = this;
113
95
  this.parent.selectAll("path.bar")
114
96
  .on("mouseover", function (datum) {
@@ -121,7 +103,7 @@ var SimpleBar = /** @class */ (function (_super) {
121
103
  element: hoveredElement,
122
104
  datum: datum
123
105
  });
124
- self.services.events.dispatchEvent("show-tooltip", {
106
+ self.services.events.dispatchEvent(Events.Tooltip.SHOW, {
125
107
  hoveredElement: hoveredElement,
126
108
  type: TooltipTypes.DATAPOINT
127
109
  });
@@ -144,14 +126,14 @@ var SimpleBar = /** @class */ (function (_super) {
144
126
  var hoveredElement = select(this);
145
127
  hoveredElement.classed("hovered", false);
146
128
  hoveredElement.transition(self.services.transitions.getTransition("graph_element_mouseout_fill_update"))
147
- .attr("fill", function (d) { return self.model.getFillScale()(d.label); });
129
+ .attr("fill", function (d) { return self.model.getFillColor(d[groupMapsTo]); });
148
130
  // Dispatch mouse event
149
131
  self.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOUT, {
150
132
  element: hoveredElement,
151
133
  datum: datum
152
134
  });
153
135
  // Hide tooltip
154
- self.services.events.dispatchEvent("hide-tooltip", { hoveredElement: hoveredElement });
136
+ self.services.events.dispatchEvent(Events.Tooltip.HIDE, { hoveredElement: hoveredElement });
155
137
  });
156
138
  };
157
139
  SimpleBar.prototype.destroy = function () {
@@ -1 +1 @@
1
- {"version":3,"file":"bar-simple.js","sourceRoot":"","sources":["bar-simple.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Bar } from \"./bar\";\nimport {\n\tEvents,\n\tRoles,\n\tTooltipTypes\n} from \"../../interfaces\";\nimport { Tools } from \"../../tools\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\nimport { color } from \"d3-color\";\n\nexport class SimpleBar extends Bar {\n\ttype = \"simple-bar\";\n\n\tinit() {\n\t\tconst eventsFragment = this.services.events;\n\n\t\t// Highlight correct circle on legend item hovers\n\t\teventsFragment.addEventListener(Events.Legend.ITEM_HOVER, this.handleLegendOnHover);\n\n\t\t// Un-highlight circles on legend item mouseouts\n\t\teventsFragment.addEventListener(Events.Legend.ITEM_MOUSEOUT, this.handleLegendMouseOut);\n\t}\n\n\trender(animate: boolean) {\n\t\t// Grab container SVG\n\t\tconst svg = this.getContainerSVG();\n\n\t\t// Update data on bar groups\n\t\tconst barGroups = svg.selectAll(\"g.bars\")\n\t\t\t.data(this.model.getDisplayData().datasets, dataset => dataset.label);\n\n\t\t// Remove dot groups that need to be removed\n\t\tbarGroups.exit()\n\t\t\t.attr(\"opacity\", 0)\n\t\t\t.remove();\n\n\t\t// Add the bar groups that need to be introduced\n\t\tconst barGroupsEnter = barGroups.enter()\n\t\t\t.append(\"g\")\n\t\t\t\t.classed(\"bars\", true)\n\t\t\t\t.attr(\"role\", Roles.GROUP);\n\n\t\t// Update data on all bars\n\t\tconst bars = barGroupsEnter.merge(barGroups)\n\t\t\t.selectAll(\"path.bar\")\n\t\t\t.data((d, i) => this.addLabelsToDataPoints(d, i), d => d.label);\n\n\t\t// Remove bars that are no longer needed\n\t\tbars.exit()\n\t\t\t.attr(\"opacity\", 0)\n\t\t\t.remove();\n\n\t\t// Add the paths that need to be introduced\n\t\tconst barsEnter = bars.enter()\n\t\t\t.append(\"path\")\n\t\t\t.attr(\"opacity\", 0);\n\n\t\tbarsEnter.merge(bars)\n\t\t\t.classed(\"bar\", true)\n\t\t\t.attr(\"width\", this.getBarWidth.bind(this))\n\t\t\t.transition(this.services.transitions.getTransition(\"bar-update-enter\", animate))\n\t\t\t.attr(\"fill\", d => this.model.getFillScale()(d.label))\n\t\t\t.attr(\"d\", (d, i) => {\n\t\t\t\t/*\n\t\t\t\t* Orientation support for horizontal/vertical bar charts\n\t\t\t\t* Determine coordinates needed for a vertical set of paths\n\t\t\t\t* to draw the bars needed, and pass those coordinates down to\n\t\t\t\t* generateSVGPathString() to decide whether it needs to flip them\n\t\t\t\t*/\n\t\t\t\tconst barWidth = this.getBarWidth();\n\t\t\t\tconst x0 = this.services.cartesianScales.getDomainValue(d, i) - barWidth / 2;\n\t\t\t\tconst x1 = x0 + barWidth;\n\t\t\t\tconst y0 = this.services.cartesianScales.getRangeValue(0);\n\t\t\t\tconst y1 = this.services.cartesianScales.getRangeValue(d, i);\n\n\t\t\t\treturn Tools.generateSVGPathString(\n\t\t\t\t\t{ x0, x1, y0, y1 },\n\t\t\t\t\tthis.services.cartesianScales.getOrientation()\n\t\t\t\t);\n\t\t\t})\n\t\t\t.attr(\"opacity\", 1)\n\t\t\t// a11y\n\t\t\t.attr(\"role\", Roles.GRAPHICS_SYMBOL)\n\t\t\t.attr(\"aria-roledescription\", \"bar\")\n\t\t\t.attr(\"aria-label\", d => d.value);\n\n\t\t// Add event listeners to elements drawn\n\t\tthis.addEventListeners();\n\t}\n\n\thandleLegendOnHover = (event: CustomEvent) => {\n\t\tconst { hoveredElement } = event.detail;\n\n\t\tthis.parent.selectAll(\"path.bar\")\n\t\t\t.transition(this.services.transitions.getTransition(\"legend-hover-simple-bar\"))\n\t\t\t.attr(\"opacity\", d => (d.label !== hoveredElement.datum()[\"key\"]) ? 0.3 : 1);\n\t}\n\n\thandleLegendMouseOut = (event: CustomEvent) => {\n\t\tthis.parent.selectAll(\"path.bar\")\n\t\t\t.transition(this.services.transitions.getTransition(\"legend-mouseout-simple-bar\"))\n\t\t\t.attr(\"opacity\", 1);\n\t}\n\n\t// TODO - This method could be re-used in more graphs\n\taddLabelsToDataPoints(d, index) {\n\t\tconst { labels } = this.model.getDisplayData();\n\n\t\treturn d.data.map((datum, i) => ({\n\t\t\tdate: datum.date,\n\t\t\tlabel: labels[i],\n\t\t\tdatasetLabel: d.label,\n\t\t\tvalue: isNaN(datum) ? datum.value : datum\n\t\t}));\n\t}\n\n\taddEventListeners() {\n\t\tconst self = this;\n\t\tthis.parent.selectAll(\"path.bar\")\n\t\t\t.on(\"mouseover\", function(datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\thoveredElement.classed(\"hovered\", true);\n\t\t\t\thoveredElement.transition(self.services.transitions.getTransition(\"graph_element_mouseover_fill_update\"))\n\t\t\t\t\t.attr(\"fill\", color(hoveredElement.attr(\"fill\")).darker(0.7).toString());\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOVER, {\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum\n\t\t\t\t});\n\n\t\t\t\tself.services.events.dispatchEvent(\"show-tooltip\", {\n\t\t\t\t\thoveredElement,\n\t\t\t\t\ttype: TooltipTypes.DATAPOINT\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"mousemove\", function(datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEMOVE, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"click\", function(datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_CLICK, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"mouseout\", function(datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\thoveredElement.classed(\"hovered\", false);\n\n\t\t\t\thoveredElement.transition(self.services.transitions.getTransition(\"graph_element_mouseout_fill_update\"))\n\t\t\t\t\t.attr(\"fill\", (d: any) => self.model.getFillScale()(d.label));\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOUT, {\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum\n\t\t\t\t});\n\n\t\t\t\t// Hide tooltip\n\t\t\t\tself.services.events.dispatchEvent(\"hide-tooltip\", { hoveredElement });\n\t\t\t});\n\t}\n\n\tdestroy() {\n\t\t// Remove event listeners\n\t\tthis.parent.selectAll(\"path.bar\")\n\t\t\t.on(\"mouseover\", null)\n\t\t\t.on(\"mousemove\", null)\n\t\t\t.on(\"mouseout\", null);\n\n\t\t// Remove legend listeners\n\t\tconst eventsFragment = this.services.events;\n\t\teventsFragment.removeEventListener(Events.Legend.ITEM_HOVER, this.handleLegendOnHover);\n\t\teventsFragment.removeEventListener(Events.Legend.ITEM_MOUSEOUT, this.handleLegendMouseOut);\n\t}\n}\n"]}
1
+ {"version":3,"file":"bar-simple.js","sourceRoot":"","sources":["bar-simple.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Bar } from \"./bar\";\nimport {\n\tEvents,\n\tRoles,\n\tTooltipTypes\n} from \"../../interfaces\";\nimport { Tools } from \"../../tools\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\nimport { color } from \"d3-color\";\n\nexport class SimpleBar extends Bar {\n\ttype = \"simple-bar\";\n\n\tinit() {\n\t\tconst eventsFragment = this.services.events;\n\n\t\t// Highlight correct circle on legend item hovers\n\t\teventsFragment.addEventListener(Events.Legend.ITEM_HOVER, this.handleLegendOnHover);\n\n\t\t// Un-highlight circles on legend item mouseouts\n\t\teventsFragment.addEventListener(Events.Legend.ITEM_MOUSEOUT, this.handleLegendMouseOut);\n\t}\n\n\trender(animate: boolean) {\n\t\tconst options = this.model.getOptions();\n\t\tconst { groupMapsTo } = options.data;\n\n\t\t// Grab container SVG\n\t\tconst svg = this.getContainerSVG();\n\n\t\t// Update data on all bars\n\t\tconst bars = svg.selectAll(\"path.bar\")\n\t\t\t.data(this.model.getDisplayData(), datum => datum[groupMapsTo]);\n\n\t\t// Remove bars that are no longer needed\n\t\tbars.exit()\n\t\t\t.attr(\"opacity\", 0)\n\t\t\t.remove();\n\n\t\t// Add the paths that need to be introduced\n\t\tconst barsEnter = bars.enter()\n\t\t\t.append(\"path\")\n\t\t\t.attr(\"opacity\", 0);\n\n\t\tbarsEnter.merge(bars)\n\t\t\t.classed(\"bar\", true)\n\t\t\t.attr(\"width\", this.getBarWidth.bind(this))\n\t\t\t.transition(this.services.transitions.getTransition(\"bar-update-enter\", animate))\n\t\t\t.attr(\"fill\", d => this.model.getFillColor(d[groupMapsTo]))\n\t\t\t.attr(\"d\", (d, i) => {\n\t\t\t\t/*\n\t\t\t\t* Orientation support for horizontal/vertical bar charts\n\t\t\t\t* Determine coordinates needed for a vertical set of paths\n\t\t\t\t* to draw the bars needed, and pass those coordinates down to\n\t\t\t\t* generateSVGPathString() to decide whether it needs to flip them\n\t\t\t\t*/\n\t\t\t\tconst barWidth = this.getBarWidth();\n\t\t\t\tconst x0 = this.services.cartesianScales.getDomainValue(d, i) - barWidth / 2;\n\t\t\t\tconst x1 = x0 + barWidth;\n\t\t\t\tconst y0 = this.services.cartesianScales.getRangeValue(0);\n\t\t\t\tconst y1 = this.services.cartesianScales.getRangeValue(d, i);\n\n\t\t\t\treturn Tools.generateSVGPathString(\n\t\t\t\t\t{ x0, x1, y0, y1 },\n\t\t\t\t\tthis.services.cartesianScales.getOrientation()\n\t\t\t\t);\n\t\t\t})\n\t\t\t.attr(\"opacity\", 1)\n\t\t\t// a11y\n\t\t\t.attr(\"role\", Roles.GRAPHICS_SYMBOL)\n\t\t\t.attr(\"aria-roledescription\", \"bar\")\n\t\t\t.attr(\"aria-label\", d => d.value);\n\n\t\t// Add event listeners to elements drawn\n\t\tthis.addEventListeners();\n\t}\n\n\thandleLegendOnHover = (event: CustomEvent) => {\n\t\tconst { hoveredElement } = event.detail;\n\t\tconst { groupMapsTo } = this.model.getOptions().data;\n\n\t\tthis.parent.selectAll(\"path.bar\")\n\t\t\t.transition(this.services.transitions.getTransition(\"legend-hover-simple-bar\"))\n\t\t\t.attr(\"opacity\", d => (d[groupMapsTo] !== hoveredElement.datum()[\"name\"]) ? 0.3 : 1);\n\t}\n\n\thandleLegendMouseOut = (event: CustomEvent) => {\n\t\tthis.parent.selectAll(\"path.bar\")\n\t\t\t.transition(this.services.transitions.getTransition(\"legend-mouseout-simple-bar\"))\n\t\t\t.attr(\"opacity\", 1);\n\t}\n\n\taddEventListeners() {\n\t\tconst options = this.model.getOptions();\n\t\tconst { groupMapsTo } = options.data;\n\n\t\tconst self = this;\n\t\tthis.parent.selectAll(\"path.bar\")\n\t\t\t.on(\"mouseover\", function(datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\thoveredElement.classed(\"hovered\", true);\n\t\t\t\thoveredElement.transition(self.services.transitions.getTransition(\"graph_element_mouseover_fill_update\"))\n\t\t\t\t\t.attr(\"fill\", color(hoveredElement.attr(\"fill\")).darker(0.7).toString());\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOVER, {\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum\n\t\t\t\t});\n\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\thoveredElement,\n\t\t\t\t\ttype: TooltipTypes.DATAPOINT\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"mousemove\", function(datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEMOVE, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"click\", function(datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_CLICK, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"mouseout\", function(datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\thoveredElement.classed(\"hovered\", false);\n\n\t\t\t\thoveredElement.transition(self.services.transitions.getTransition(\"graph_element_mouseout_fill_update\"))\n\t\t\t\t\t.attr(\"fill\", (d: any) => self.model.getFillColor(d[groupMapsTo]));\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOUT, {\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum\n\t\t\t\t});\n\n\t\t\t\t// Hide tooltip\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE, { hoveredElement });\n\t\t\t});\n\t}\n\n\tdestroy() {\n\t\t// Remove event listeners\n\t\tthis.parent.selectAll(\"path.bar\")\n\t\t\t.on(\"mouseover\", null)\n\t\t\t.on(\"mousemove\", null)\n\t\t\t.on(\"mouseout\", null);\n\n\t\t// Remove legend listeners\n\t\tconst eventsFragment = this.services.events;\n\t\teventsFragment.removeEventListener(Events.Legend.ITEM_HOVER, this.handleLegendOnHover);\n\t\teventsFragment.removeEventListener(Events.Legend.ITEM_MOUSEOUT, this.handleLegendMouseOut);\n\t}\n}\n"]}
@@ -2,7 +2,6 @@ import { Bar } from "./bar";
2
2
  export declare class StackedBar extends Bar {
3
3
  type: string;
4
4
  init(): void;
5
- getStackData(): any;
6
5
  render(animate: boolean): void;
7
6
  handleLegendOnHover: (event: CustomEvent<any>) => void;
8
7
  handleLegendMouseOut: (event: CustomEvent<any>) => void;
@@ -14,23 +14,11 @@ var __extends = (this && this.__extends) || (function () {
14
14
  // Internal Imports
15
15
  import { Tools } from "../../tools";
16
16
  import { Bar } from "./bar";
17
- import { Roles, ScaleTypes, TooltipTypes, Events, CartesianOrientations } from "../../interfaces";
17
+ import { Roles, TooltipTypes, Events, CartesianOrientations } from "../../interfaces";
18
18
  // D3 Imports
19
19
  import { select } from "d3-selection";
20
- import { stack } from "d3-shape";
21
20
  import { color } from "d3-color";
22
- // Add datasetLabel to each piece of data
23
- // To be used to get the fill color
24
- var addLabelsAndValueToData = function (d) {
25
- Object.keys(d).map(function (key) {
26
- if (typeof d[key] === "object") {
27
- d[key]["datasetLabel"] = d.key;
28
- d[key]["label"] = d[key].data["label"];
29
- d[key]["value"] = d[key].data[d.key];
30
- }
31
- });
32
- return d;
33
- };
21
+ import { map } from "d3-collection";
34
22
  var StackedBar = /** @class */ (function (_super) {
35
23
  __extends(StackedBar, _super);
36
24
  function StackedBar() {
@@ -58,65 +46,21 @@ var StackedBar = /** @class */ (function (_super) {
58
46
  // Un-highlight circles on legend item mouseouts
59
47
  eventsFragment.addEventListener(Events.Legend.ITEM_MOUSEOUT, this.handleLegendMouseOut);
60
48
  };
61
- StackedBar.prototype.getStackData = function () {
62
- var stackDataArray;
63
- var displayData = this.model.getDisplayData();
64
- // the domain axis for stack data depends on the orientation of the bar chart
65
- var domainAxisPosition = this.services.cartesianScales.getDomainAxisPosition();
66
- var domainScaleType = this.services.cartesianScales.getScaleTypeByPosition(domainAxisPosition);
67
- // get scale type for the main axis
68
- var timeSeries = domainScaleType === ScaleTypes.TIME;
69
- if (timeSeries) {
70
- // Get all date values provided in data
71
- // TODO - Could be re-used through the model
72
- var allDates_1 = [];
73
- displayData.datasets.forEach(function (dataset) {
74
- allDates_1 = allDates_1.concat(dataset.data.map(function (datum) { return Number(datum.date); }));
75
- });
76
- allDates_1 = Tools.removeArrayDuplicates(allDates_1).sort();
77
- // Go through all date values
78
- // And get corresponding data from each dataset
79
- stackDataArray = allDates_1.map(function (date, i) {
80
- var correspondingData = {};
81
- displayData.datasets.forEach(function (dataset) {
82
- var correspondingDatum = dataset.data.find(function (datum) { return Number(datum.date) === Number(date); });
83
- if (correspondingDatum) {
84
- correspondingData[dataset.label] = correspondingDatum.value;
85
- }
86
- else {
87
- correspondingData[dataset.label] = 0;
88
- }
89
- });
90
- correspondingData["label"] = date;
91
- return correspondingData;
92
- });
93
- }
94
- else {
95
- // Create the stack datalist
96
- stackDataArray = displayData.labels.map(function (label, i) {
97
- var correspondingData = {};
98
- displayData.datasets.forEach(function (dataset) {
99
- correspondingData[dataset.label] = !isNaN(dataset.data[i]) ? dataset.data[i] : dataset.data[i].value;
100
- });
101
- correspondingData["label"] = label;
102
- return correspondingData;
103
- });
104
- }
105
- return stackDataArray;
106
- };
107
49
  StackedBar.prototype.render = function (animate) {
108
50
  var _this = this;
109
- // Chart options mixed with the internal configurations
110
- var options = this.model.getOptions();
111
51
  // Grab container SVG
112
52
  var svg = this.getContainerSVG();
113
- // Create the data and keys that'll be used by the stack layout
53
+ // Chart options mixed with the internal configurations
114
54
  var displayData = this.model.getDisplayData();
115
- var stackDataArray = this.getStackData();
116
- var stackKeys = displayData.datasets.map(function (dataset) { return dataset.label; });
55
+ var options = this.model.getOptions();
56
+ var groupMapsTo = options.data.groupMapsTo;
57
+ var domainIdentifier = this.services.cartesianScales.getDomainIdentifier();
58
+ // Create the data and keys that'll be used by the stack layout
59
+ var stackKeys = map(displayData, function (datum) { return datum[domainIdentifier]; }).keys();
60
+ var stackData = this.model.getStackedData();
117
61
  // Update data on all bar groups
118
62
  var barGroups = svg.selectAll("g.bars")
119
- .data(stack().keys(stackKeys)(stackDataArray), function (d) { return d.key; });
63
+ .data(stackData, function (d) { return d.key; });
120
64
  // Remove elements that need to be exited
121
65
  // We need exit at the top here to make sure that
122
66
  // Data filters are processed before entering new elements
@@ -131,35 +75,18 @@ var StackedBar = /** @class */ (function (_super) {
131
75
  .attr("role", Roles.GROUP);
132
76
  // Update data on all bars
133
77
  var bars = svg.selectAll("g.bars").selectAll("path.bar")
134
- .data(function (d) { return addLabelsAndValueToData(d); }, function (d) { return d.label; });
78
+ .data(function (data) { return data; });
135
79
  // Remove bars that need to be removed
136
80
  bars.exit()
137
81
  .remove();
138
- var yScale = this.services.cartesianScales.getRangeScale();
139
82
  bars.enter()
140
83
  .append("path")
141
84
  .merge(bars)
142
85
  .classed("bar", true)
143
86
  .transition(this.services.transitions.getTransition("bar-update-enter", animate))
144
- .attr("fill", function (d) { return _this.model.getFillScale()[d.datasetLabel](d.label); })
145
- .attr("height", function (d, i) {
146
- var datasetLabel = d.datasetLabel;
147
- var datasetLabelIndex = stackKeys.indexOf(datasetLabel);
148
- var height;
149
- // determine height based on the y axis
150
- if (yScale.scaleType === ScaleTypes.LABELS) {
151
- height = Math.abs(yScale.scale.range()[0] - _this.services.cartesianScales.getRangeValue(d.label, i));
152
- }
153
- else {
154
- height = _this.services.cartesianScales.getRangeValue(d[0]) - _this.services.cartesianScales.getRangeValue(d[1]);
155
- }
156
- // create dividers between bars
157
- if (datasetLabelIndex > 0 && height >= options.bars.dividerSize) {
158
- return height - options.bars.dividerSize;
159
- }
160
- return height;
161
- })
87
+ .attr("fill", function (d) { return _this.model.getFillColor(d[groupMapsTo]); })
162
88
  .attr("d", function (d, i) {
89
+ var key = stackKeys[i];
163
90
  /*
164
91
  * Orientation support for horizontal/vertical bar charts
165
92
  * Determine coordinates needed for a vertical set of paths
@@ -167,7 +94,7 @@ var StackedBar = /** @class */ (function (_super) {
167
94
  * generateSVGPathString() to decide whether it needs to flip them
168
95
  */
169
96
  var barWidth = _this.getBarWidth();
170
- var x0 = _this.services.cartesianScales.getDomainValue(d, i) - barWidth / 2;
97
+ var x0 = _this.services.cartesianScales.getDomainValue(key, i) - barWidth / 2;
171
98
  var x1 = x0 + barWidth;
172
99
  var y0 = _this.services.cartesianScales.getRangeValue(d[0], i);
173
100
  var y1 = _this.services.cartesianScales.getRangeValue(d[1], i);
@@ -191,6 +118,8 @@ var StackedBar = /** @class */ (function (_super) {
191
118
  this.addEventListeners();
192
119
  };
193
120
  StackedBar.prototype.addEventListeners = function () {
121
+ var options = this.model.getOptions();
122
+ var groupMapsTo = options.data.groupMapsTo;
194
123
  var self = this;
195
124
  this.parent.selectAll("path.bar")
196
125
  .on("mouseover", function (datum) {
@@ -204,29 +133,18 @@ var StackedBar = /** @class */ (function (_super) {
204
133
  });
205
134
  })
206
135
  .on("mousemove", function (datum) {
136
+ var _a;
207
137
  var hoveredElement = select(this);
208
- var itemData = select(this).datum();
209
- hoveredElement.classed("hovered", true);
210
- var stackedData = itemData["data"];
211
- var sharedLabel = stackedData["label"];
212
- // Remove the label field
213
- delete stackedData["label"];
214
- // filter out the label from the datasets' and associated values
215
- var activePoints = Object.keys(stackedData)
216
- .map(function (key) { return ({
217
- datasetLabel: key,
218
- value: stackedData[key],
219
- label: sharedLabel
220
- }); });
221
- // Dispatch mouse event
222
- self.services.events.dispatchEvent(Events.Bar.BAR_MOUSEMOVE, {
223
- element: hoveredElement,
224
- datum: datum
225
- });
138
+ var itemData = datum.data[datum.group];
139
+ var rangeIdentifier = self.services.cartesianScales.getRangeIdentifier();
140
+ var groupMapsTo = self.model.getOptions().data.groupMapsTo;
226
141
  // Show tooltip
227
142
  self.services.events.dispatchEvent("show-tooltip", {
228
- multidata: activePoints,
229
143
  hoveredElement: hoveredElement,
144
+ data: (_a = {},
145
+ _a[rangeIdentifier] = itemData,
146
+ _a[groupMapsTo] = datum.group,
147
+ _a),
230
148
  type: TooltipTypes.DATAPOINT
231
149
  });
232
150
  })
@@ -241,14 +159,14 @@ var StackedBar = /** @class */ (function (_super) {
241
159
  var hoveredElement = select(this);
242
160
  hoveredElement.classed("hovered", false);
243
161
  hoveredElement.transition(self.services.transitions.getTransition("graph_element_mouseout_fill_update"))
244
- .attr("fill", function (d) { return self.model.getFillScale()[d.datasetLabel](d.label); });
162
+ .attr("fill", function (d) { return self.model.getFillColor(d[groupMapsTo]); });
245
163
  // Dispatch mouse event
246
164
  self.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOUT, {
247
165
  element: hoveredElement,
248
166
  datum: datum
249
167
  });
250
168
  // Hide tooltip
251
- self.services.events.dispatchEvent("hide-tooltip", { hoveredElement: hoveredElement });
169
+ self.services.events.dispatchEvent(Events.Tooltip.HIDE, { hoveredElement: hoveredElement });
252
170
  });
253
171
  };
254
172
  StackedBar.prototype.destroy = function () {
@@ -1 +1 @@
1
- {"version":3,"file":"bar-stacked.js","sourceRoot":"","sources":["bar-stacked.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Tools } from \"../../tools\";\nimport { Bar } from \"./bar\";\nimport {\n\tRoles,\n\tScaleTypes,\n\tTooltipTypes,\n\tEvents,\n\tCartesianOrientations\n} from \"../../interfaces\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\nimport { stack } from \"d3-shape\";\nimport { color } from \"d3-color\";\n\n// Add datasetLabel to each piece of data\n// To be used to get the fill color\nconst addLabelsAndValueToData = d => {\n\tObject.keys(d).map(key => {\n\t\tif (typeof d[key] === \"object\") {\n\t\t\td[key][\"datasetLabel\"] = d.key;\n\t\t\td[key][\"label\"] = d[key].data[\"label\"];\n\t\t\td[key][\"value\"] = d[key].data[d.key];\n\t\t}\n\t});\n\n\treturn d;\n};\n\nexport class StackedBar extends Bar {\n\ttype = \"stacked-bar\";\n\n\tinit() {\n\t\tconst eventsFragment = this.services.events;\n\n\t\t// Highlight correct circle on legend item hovers\n\t\teventsFragment.addEventListener(Events.Legend.ITEM_HOVER, this.handleLegendOnHover);\n\n\t\t// Un-highlight circles on legend item mouseouts\n\t\teventsFragment.addEventListener(Events.Legend.ITEM_MOUSEOUT, this.handleLegendMouseOut);\n\t}\n\n\tgetStackData() {\n\t\tlet stackDataArray;\n\t\tconst displayData = this.model.getDisplayData();\n\n\t\t// the domain axis for stack data depends on the orientation of the bar chart\n\t\tconst domainAxisPosition = this.services.cartesianScales.getDomainAxisPosition();\n\t\tconst domainScaleType = this.services.cartesianScales.getScaleTypeByPosition(domainAxisPosition);\n\t\t// get scale type for the main axis\n\t\tconst timeSeries = domainScaleType === ScaleTypes.TIME;\n\n\t\tif (timeSeries) {\n\t\t\t// Get all date values provided in data\n\t\t\t// TODO - Could be re-used through the model\n\t\t\tlet allDates = [];\n\t\t\tdisplayData.datasets.forEach(dataset => {\n\t\t\t\tallDates = allDates.concat(dataset.data.map(datum => Number(datum.date)));\n\t\t\t});\n\t\t\tallDates = Tools.removeArrayDuplicates(allDates).sort();\n\n\t\t\t// Go through all date values\n\t\t\t// And get corresponding data from each dataset\n\t\t\tstackDataArray = allDates.map((date, i) => {\n\t\t\t\tconst correspondingData = {};\n\n\t\t\t\tdisplayData.datasets.forEach(dataset => {\n\t\t\t\t\tconst correspondingDatum = dataset.data.find(datum => Number(datum.date) === Number(date));\n\t\t\t\t\tif (correspondingDatum) {\n\t\t\t\t\t\tcorrespondingData[dataset.label] = correspondingDatum.value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcorrespondingData[dataset.label] = 0;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tcorrespondingData[\"label\"] = date;\n\n\t\t\t\treturn correspondingData;\n\t\t\t});\n\t\t} else {\n\t\t\t// Create the stack datalist\n\t\t\tstackDataArray = displayData.labels.map((label, i) => {\n\t\t\t\tconst correspondingData = {};\n\n\t\t\t\tdisplayData.datasets.forEach(dataset => {\n\t\t\t\t\tcorrespondingData[dataset.label] = !isNaN(dataset.data[i]) ? dataset.data[i] : dataset.data[i].value;\n\t\t\t\t});\n\t\t\t\tcorrespondingData[\"label\"] = label;\n\n\t\t\t\treturn correspondingData;\n\t\t\t});\n\t\t}\n\n\t\treturn stackDataArray;\n\t}\n\n\trender(animate: boolean) {\n\t\t// Chart options mixed with the internal configurations\n\t\tconst options = this.model.getOptions();\n\n\t\t// Grab container SVG\n\t\tconst svg = this.getContainerSVG();\n\n\t\t// Create the data and keys that'll be used by the stack layout\n\t\tconst displayData = this.model.getDisplayData();\n\t\tconst stackDataArray = this.getStackData();\n\t\tconst stackKeys = displayData.datasets.map(dataset => dataset.label);\n\n\t\t// Update data on all bar groups\n\t\tconst barGroups = svg.selectAll(\"g.bars\")\n\t\t\t.data(stack().keys(stackKeys)(stackDataArray), d => d.key);\n\n\t\t// Remove elements that need to be exited\n\t\t// We need exit at the top here to make sure that\n\t\t// Data filters are processed before entering new elements\n\t\t// Or updating existing ones\n\t\tbarGroups.exit()\n\t\t\t.attr(\"opacity\", 0)\n\t\t\t.remove();\n\n\t\t// Add bar groups that need to be introduced\n\t\tbarGroups.enter()\n\t\t\t.append(\"g\")\n\t\t\t.classed(\"bars\", true)\n\t\t\t.attr(\"role\", Roles.GROUP);\n\n\t\t// Update data on all bars\n\t\tconst bars = svg.selectAll(\"g.bars\").selectAll(\"path.bar\")\n\t\t\t.data(d => addLabelsAndValueToData(d), d => d.label);\n\n\t\t// Remove bars that need to be removed\n\t\tbars.exit()\n\t\t\t.remove();\n\n\t\tconst yScale = this.services.cartesianScales.getRangeScale();\n\t\tbars.enter()\n\t\t\t.append(\"path\")\n\t\t\t.merge(bars)\n\t\t\t\t.classed(\"bar\", true)\n\t\t\t\t.transition(this.services.transitions.getTransition(\"bar-update-enter\", animate))\n\t\t\t\t.attr(\"fill\", d => this.model.getFillScale()[d.datasetLabel](d.label))\n\t\t\t\t.attr(\"height\", (d, i) => {\n\t\t\t\t\tconst { datasetLabel } = d;\n\t\t\t\t\tconst datasetLabelIndex = stackKeys.indexOf(datasetLabel);\n\t\t\t\t\tlet height;\n\t\t\t\t\t// determine height based on the y axis\n\t\t\t\t\tif (yScale.scaleType === ScaleTypes.LABELS) {\n\t\t\t\t\t\theight = Math.abs(yScale.scale.range()[0] - this.services.cartesianScales.getRangeValue(d.label, i));\n\t\t\t\t\t} else {\n\t\t\t\t\t\theight = this.services.cartesianScales.getRangeValue(d[0]) - this.services.cartesianScales.getRangeValue(d[1]);\n\t\t\t\t\t}\n\t\t\t\t\t// create dividers between bars\n\t\t\t\t\tif (datasetLabelIndex > 0 && height >= options.bars.dividerSize) {\n\t\t\t\t\t\treturn height - options.bars.dividerSize;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn height;\n\t\t\t\t})\n\t\t\t\t.attr(\"d\", (d, i) => {\n\t\t\t\t\t/*\n\t\t\t\t\t* Orientation support for horizontal/vertical bar charts\n\t\t\t\t\t* Determine coordinates needed for a vertical set of paths\n\t\t\t\t\t* to draw the bars needed, and pass those coordinates down to\n\t\t\t\t\t* generateSVGPathString() to decide whether it needs to flip them\n\t\t\t\t\t*/\n\t\t\t\t\tconst barWidth = this.getBarWidth();\n\t\t\t\t\tconst x0 = this.services.cartesianScales.getDomainValue(d, i) - barWidth / 2;\n\t\t\t\t\tconst x1 = x0 + barWidth;\n\t\t\t\t\tconst y0 = this.services.cartesianScales.getRangeValue(d[0], i);\n\t\t\t\t\tlet y1 = this.services.cartesianScales.getRangeValue(d[1], i);\n\n\t\t\t\t\t// Add the divider gap\n\t\t\t\t\tif (Math.abs(y1 - y0) > 0 && Math.abs(y1 - y0) > options.bars.dividerSize) {\n\t\t\t\t\t\tif (this.services.cartesianScales.getOrientation() === CartesianOrientations.VERTICAL) {\n\t\t\t\t\t\t\ty1 += 1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ty1 -= 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Tools.generateSVGPathString(\n\t\t\t\t\t\t{ x0, x1, y0, y1 },\n\t\t\t\t\t\tthis.services.cartesianScales.getOrientation()\n\t\t\t\t\t);\n\t\t\t\t})\n\t\t\t\t.attr(\"opacity\", 1)\n\t\t\t\t// a11y\n\t\t\t\t.attr(\"role\", Roles.GRAPHICS_SYMBOL)\n\t\t\t\t.attr(\"aria-roledescription\", \"bar\")\n\t\t\t\t.attr(\"aria-label\", d => d.value);\n\n\t\t// Add event listeners for the above elements\n\t\tthis.addEventListeners();\n\t}\n\n\t// Highlight elements that match the hovered legend item\n\thandleLegendOnHover = (event: CustomEvent) => {\n\t\tconst { hoveredElement } = event.detail;\n\n\t\tthis.parent.selectAll(\"path.bar\")\n\t\t\t.transition(this.services.transitions.getTransition(\"legend-hover-bar\"))\n\t\t\t.attr(\"opacity\", d => (d.datasetLabel !== hoveredElement.datum()[\"key\"]) ? 0.3 : 1);\n\t}\n\n\t// Un-highlight all elements\n\thandleLegendMouseOut = (event: CustomEvent) => {\n\t\tthis.parent.selectAll(\"path.bar\")\n\t\t\t.transition(this.services.transitions.getTransition(\"legend-mouseout-bar\"))\n\t\t\t.attr(\"opacity\", 1);\n\t}\n\n\taddEventListeners() {\n\t\tconst self = this;\n\t\tthis.parent.selectAll(\"path.bar\")\n\t\t\t.on(\"mouseover\", function(datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\n\t\t\t\thoveredElement.transition(self.services.transitions.getTransition(\"graph_element_mouseover_fill_update\"))\n\t\t\t\t\t.attr(\"fill\", color(hoveredElement.attr(\"fill\")).darker(0.7).toString());\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOVER, {\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"mousemove\", function(datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\tconst itemData = select(this).datum();\n\t\t\t\thoveredElement.classed(\"hovered\", true);\n\n\t\t\t\tconst stackedData = itemData[\"data\"];\n\t\t\t\tconst sharedLabel = stackedData[\"label\"];\n\n\t\t\t\t// Remove the label field\n\t\t\t\tdelete stackedData[\"label\"];\n\n\t\t\t\t// filter out the label from the datasets' and associated values\n\t\t\t\tconst activePoints = Object.keys(stackedData)\n\t\t\t\t\t.map(key => ({\n\t\t\t\t\t\tdatasetLabel: key,\n\t\t\t\t\t\tvalue: stackedData[key],\n\t\t\t\t\t\tlabel: sharedLabel\n\t\t\t\t\t}));\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEMOVE, {\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum\n\t\t\t\t});\n\n\t\t\t\t// Show tooltip\n\t\t\t\tself.services.events.dispatchEvent(\"show-tooltip\", {\n\t\t\t\t\tmultidata: activePoints,\n\t\t\t\t\thoveredElement,\n\t\t\t\t\ttype: TooltipTypes.DATAPOINT\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"click\", function(datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_CLICK, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"mouseout\", function(datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\thoveredElement.classed(\"hovered\", false);\n\n\t\t\t\thoveredElement.transition(self.services.transitions.getTransition(\"graph_element_mouseout_fill_update\"))\n\t\t\t\t\t.attr(\"fill\", (d: any) => self.model.getFillScale()[d.datasetLabel](d.label));\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOUT, {\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum\n\t\t\t\t});\n\n\t\t\t\t// Hide tooltip\n\t\t\t\tself.services.events.dispatchEvent(\"hide-tooltip\", { hoveredElement });\n\t\t\t});\n\t}\n\n\tdestroy() {\n\t\t// Remove event listeners\n\t\tthis.parent.selectAll(\"path.bar\")\n\t\t\t.on(\"mouseover\", null)\n\t\t\t.on(\"mousemove\", null)\n\t\t\t.on(\"mouseout\", null);\n\n\t\t// Remove legend listeners\n\t\tconst eventsFragment = this.services.events;\n\t\teventsFragment.removeEventListener(Events.Legend.ITEM_HOVER, this.handleLegendOnHover);\n\t\teventsFragment.removeEventListener(Events.Legend.ITEM_MOUSEOUT, this.handleLegendMouseOut);\n\t}\n}\n"]}
1
+ {"version":3,"file":"bar-stacked.js","sourceRoot":"","sources":["bar-stacked.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Tools } from \"../../tools\";\nimport { Bar } from \"./bar\";\nimport {\n\tRoles,\n\tTooltipTypes,\n\tEvents,\n\tCartesianOrientations\n} from \"../../interfaces\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\nimport { color } from \"d3-color\";\nimport { map } from \"d3-collection\";\n\nexport class StackedBar extends Bar {\n\ttype = \"stacked-bar\";\n\n\tinit() {\n\t\tconst eventsFragment = this.services.events;\n\n\t\t// Highlight correct circle on legend item hovers\n\t\teventsFragment.addEventListener(Events.Legend.ITEM_HOVER, this.handleLegendOnHover);\n\n\t\t// Un-highlight circles on legend item mouseouts\n\t\teventsFragment.addEventListener(Events.Legend.ITEM_MOUSEOUT, this.handleLegendMouseOut);\n\t}\n\n\trender(animate: boolean) {\n\t\t// Grab container SVG\n\t\tconst svg = this.getContainerSVG();\n\n\t\t// Chart options mixed with the internal configurations\n\t\tconst displayData = this.model.getDisplayData();\n\t\tconst options = this.model.getOptions();\n\t\tconst { groupMapsTo } = options.data;\n\n\t\tconst domainIdentifier = this.services.cartesianScales.getDomainIdentifier();\n\n\t\t// Create the data and keys that'll be used by the stack layout\n\t\tconst stackKeys = map(displayData, datum => datum[domainIdentifier]).keys();\n\t\tconst stackData = this.model.getStackedData();\n\n\t\t// Update data on all bar groups\n\t\tconst barGroups = svg.selectAll(\"g.bars\")\n\t\t\t.data(stackData, d => d.key);\n\n\t\t// Remove elements that need to be exited\n\t\t// We need exit at the top here to make sure that\n\t\t// Data filters are processed before entering new elements\n\t\t// Or updating existing ones\n\t\tbarGroups.exit()\n\t\t\t.attr(\"opacity\", 0)\n\t\t\t.remove();\n\n\t\t// Add bar groups that need to be introduced\n\t\tbarGroups.enter()\n\t\t\t.append(\"g\")\n\t\t\t.classed(\"bars\", true)\n\t\t\t.attr(\"role\", Roles.GROUP);\n\n\t\t// Update data on all bars\n\t\tconst bars = svg.selectAll(\"g.bars\").selectAll(\"path.bar\")\n\t\t\t.data(data => data);\n\n\t\t// Remove bars that need to be removed\n\t\tbars.exit()\n\t\t\t.remove();\n\n\t\tbars.enter()\n\t\t\t.append(\"path\")\n\t\t\t.merge(bars)\n\t\t\t.classed(\"bar\", true)\n\t\t\t.transition(this.services.transitions.getTransition(\"bar-update-enter\", animate))\n\t\t\t.attr(\"fill\", d => this.model.getFillColor(d[groupMapsTo]))\n\t\t\t.attr(\"d\", (d, i) => {\n\t\t\t\tconst key = stackKeys[i];\n\n\t\t\t\t/*\n\t\t\t\t* Orientation support for horizontal/vertical bar charts\n\t\t\t\t* Determine coordinates needed for a vertical set of paths\n\t\t\t\t* to draw the bars needed, and pass those coordinates down to\n\t\t\t\t* generateSVGPathString() to decide whether it needs to flip them\n\t\t\t\t*/\n\t\t\t\tconst barWidth = this.getBarWidth();\n\t\t\t\tconst x0 = this.services.cartesianScales.getDomainValue(key, i) - barWidth / 2;\n\t\t\t\tconst x1 = x0 + barWidth;\n\t\t\t\tconst y0 = this.services.cartesianScales.getRangeValue(d[0], i);\n\t\t\t\tlet y1 = this.services.cartesianScales.getRangeValue(d[1], i);\n\n\t\t\t\t// Add the divider gap\n\t\t\t\tif (Math.abs(y1 - y0) > 0 && Math.abs(y1 - y0) > options.bars.dividerSize) {\n\t\t\t\t\tif (this.services.cartesianScales.getOrientation() === CartesianOrientations.VERTICAL) {\n\t\t\t\t\t\ty1 += 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ty1 -= 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn Tools.generateSVGPathString(\n\t\t\t\t\t{ x0, x1, y0, y1 },\n\t\t\t\t\tthis.services.cartesianScales.getOrientation()\n\t\t\t\t);\n\t\t\t})\n\t\t\t.attr(\"opacity\", 1)\n\t\t\t// a11y\n\t\t\t.attr(\"role\", Roles.GRAPHICS_SYMBOL)\n\t\t\t.attr(\"aria-roledescription\", \"bar\")\n\t\t\t.attr(\"aria-label\", d => d.value);\n\n\t\t// Add event listeners for the above elements\n\t\tthis.addEventListeners();\n\t}\n\n\t// Highlight elements that match the hovered legend item\n\thandleLegendOnHover = (event: CustomEvent) => {\n\t\tconst { hoveredElement } = event.detail;\n\n\t\tthis.parent.selectAll(\"path.bar\")\n\t\t\t.transition(this.services.transitions.getTransition(\"legend-hover-bar\"))\n\t\t\t.attr(\"opacity\", d => (d.datasetLabel !== hoveredElement.datum()[\"key\"]) ? 0.3 : 1);\n\t}\n\n\t// Un-highlight all elements\n\thandleLegendMouseOut = (event: CustomEvent) => {\n\t\tthis.parent.selectAll(\"path.bar\")\n\t\t\t.transition(this.services.transitions.getTransition(\"legend-mouseout-bar\"))\n\t\t\t.attr(\"opacity\", 1);\n\t}\n\n\taddEventListeners() {\n\t\tconst options = this.model.getOptions();\n\t\tconst { groupMapsTo } = options.data;\n\n\t\tconst self = this;\n\t\tthis.parent.selectAll(\"path.bar\")\n\t\t\t.on(\"mouseover\", function(datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\n\t\t\t\thoveredElement.transition(self.services.transitions.getTransition(\"graph_element_mouseover_fill_update\"))\n\t\t\t\t\t.attr(\"fill\", color(hoveredElement.attr(\"fill\")).darker(0.7).toString());\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOVER, {\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"mousemove\", function(datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\tconst itemData = datum.data[datum.group];\n\n\t\t\t\tconst rangeIdentifier = self.services.cartesianScales.getRangeIdentifier();\n\t\t\t\tconst { groupMapsTo } = self.model.getOptions().data;\n\n\t\t\t\t// Show tooltip\n\t\t\t\tself.services.events.dispatchEvent(\"show-tooltip\", {\n\t\t\t\t\thoveredElement,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\t[rangeIdentifier]: itemData,\n\t\t\t\t\t\t[groupMapsTo]: datum.group\n\t\t\t\t\t},\n\t\t\t\t\ttype: TooltipTypes.DATAPOINT\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"click\", function(datum) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_CLICK, {\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on(\"mouseout\", function(datum) {\n\t\t\t\tconst hoveredElement = select(this);\n\t\t\t\thoveredElement.classed(\"hovered\", false);\n\n\t\t\t\thoveredElement.transition(self.services.transitions.getTransition(\"graph_element_mouseout_fill_update\"))\n\t\t\t\t\t.attr(\"fill\", (d: any) => self.model.getFillColor(d[groupMapsTo]));\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Bar.BAR_MOUSEOUT, {\n\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\tdatum\n\t\t\t\t});\n\n\t\t\t\t// Hide tooltip\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE, { hoveredElement });\n\t\t\t});\n\t}\n\n\tdestroy() {\n\t\t// Remove event listeners\n\t\tthis.parent.selectAll(\"path.bar\")\n\t\t\t.on(\"mouseover\", null)\n\t\t\t.on(\"mousemove\", null)\n\t\t\t.on(\"mouseout\", null);\n\n\t\t// Remove legend listeners\n\t\tconst eventsFragment = this.services.events;\n\t\teventsFragment.removeEventListener(Events.Legend.ITEM_HOVER, this.handleLegendOnHover);\n\t\teventsFragment.removeEventListener(Events.Legend.ITEM_MOUSEOUT, this.handleLegendMouseOut);\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"bar.js","sourceRoot":"","sources":["bar.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC;IAAyB,uBAAS;IAAlC;;IAkBA,CAAC;IAjBA,oEAAoE;IAC1D,yBAAW,GAArB;QACC,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACxC,IAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;QAEjE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YACrB,OAAO,IAAI,CAAC,GAAG,CACd,OAAO,CAAC,IAAI,CAAC,QAAQ,EACrB,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CACvD,CAAC;SACF;QAED,OAAO,IAAI,CAAC,GAAG,CACd,OAAO,CAAC,IAAI,CAAC,QAAQ,EACrB,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CACrB,CAAC;IACH,CAAC;IACF,UAAC;AAAD,CAAC,AAlBD,CAAyB,SAAS,GAkBjC","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { CartesianOrientations } from \"../../interfaces\";\n\nexport class Bar extends Component {\n\t// Gets the correct width for bars based on options & configurations\n\tprotected getBarWidth() {\n\t\tconst options = this.model.getOptions();\n\t\tconst mainXScale = this.services.cartesianScales.getMainXScale();\n\n\t\tif (!mainXScale.step) {\n\t\t\treturn Math.min(\n\t\t\t\toptions.bars.maxWidth,\n\t\t\t\t(5 / mainXScale.ticks().length) * options.bars.maxWidth\n\t\t\t);\n\t\t}\n\n\t\treturn Math.min(\n\t\t\toptions.bars.maxWidth,\n\t\t\tmainXScale.step() / 2\n\t\t);\n\t}\n}\n"]}
1
+ {"version":3,"file":"bar.js","sourceRoot":"","sources":["bar.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC;IAAyB,uBAAS;IAAlC;;IAkBA,CAAC;IAjBA,oEAAoE;IAC1D,yBAAW,GAArB;QACC,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACxC,IAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;QAEjE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YACrB,OAAO,IAAI,CAAC,GAAG,CACd,OAAO,CAAC,IAAI,CAAC,QAAQ,EACrB,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CACvD,CAAC;SACF;QAED,OAAO,IAAI,CAAC,GAAG,CACd,OAAO,CAAC,IAAI,CAAC,QAAQ,EACrB,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CACrB,CAAC;IACH,CAAC;IACF,UAAC;AAAD,CAAC,AAlBD,CAAyB,SAAS,GAkBjC","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\n\nexport class Bar extends Component {\n\t// Gets the correct width for bars based on options & configurations\n\tprotected getBarWidth() {\n\t\tconst options = this.model.getOptions();\n\t\tconst mainXScale = this.services.cartesianScales.getMainXScale();\n\n\t\tif (!mainXScale.step) {\n\t\t\treturn Math.min(\n\t\t\t\toptions.bars.maxWidth,\n\t\t\t\t(5 / mainXScale.ticks().length) * options.bars.maxWidth\n\t\t\t);\n\t\t}\n\n\t\treturn Math.min(\n\t\t\toptions.bars.maxWidth,\n\t\t\tmainXScale.step() / 2\n\t\t);\n\t}\n}\n"]}
@@ -4,5 +4,4 @@ export declare class Bubble extends Scatter {
4
4
  type: string;
5
5
  getRadiusScale(selection: Selection<any, any, any, any>): import("d3-scale").ScaleLinear<number, number>;
6
6
  styleCircles(selection: Selection<any, any, any, any>, animate: boolean): void;
7
- addLabelsToDataPoints(d: any, index: any): any;
8
7
  }