@carbon/charts 0.53.5 → 0.54.3

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 (118) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/build/demo/data/CHART_TYPES.d.ts +5 -0
  3. package/build/demo/data/heatmap.d.ts +96 -0
  4. package/build/demo/data/index.d.ts +1 -0
  5. package/build/src/charts/heatmap.d.ts +10 -0
  6. package/build/src/charts/index.d.ts +1 -0
  7. package/build/src/components/axes/axis.d.ts +7 -1
  8. package/build/src/components/axes/hover-axis.d.ts +10 -0
  9. package/build/src/components/essentials/color-scale-legend.d.ts +11 -0
  10. package/build/src/components/graphs/bar-stacked.d.ts +1 -0
  11. package/build/src/components/graphs/heatmap.d.ts +25 -0
  12. package/build/src/components/index.d.ts +2 -0
  13. package/build/src/configuration-non-customizable.d.ts +12 -0
  14. package/build/src/configuration.d.ts +2 -1
  15. package/build/src/interfaces/charts.d.ts +35 -2
  16. package/build/src/interfaces/enums.d.ts +22 -0
  17. package/build/src/interfaces/events.d.ts +13 -1
  18. package/build/src/model/cartesian-charts.d.ts +8 -1
  19. package/build/src/model/heatmap.d.ts +57 -0
  20. package/build/src/model/model.d.ts +1 -1
  21. package/build/src/services/scales-cartesian.d.ts +1 -0
  22. package/bundle.js +1 -1
  23. package/charts/heatmap.d.ts +10 -0
  24. package/charts/heatmap.js +138 -0
  25. package/charts/heatmap.js.map +1 -0
  26. package/charts/index.d.ts +1 -0
  27. package/charts/index.js +1 -0
  28. package/charts/index.js.map +1 -1
  29. package/components/axes/axis.d.ts +7 -1
  30. package/components/axes/axis.js +9 -2
  31. package/components/axes/axis.js.map +1 -1
  32. package/components/axes/hover-axis.d.ts +10 -0
  33. package/components/axes/hover-axis.js +235 -0
  34. package/components/axes/hover-axis.js.map +1 -0
  35. package/components/axes/two-dimensional-axes.js +8 -3
  36. package/components/axes/two-dimensional-axes.js.map +1 -1
  37. package/components/essentials/color-scale-legend.d.ts +11 -0
  38. package/components/essentials/color-scale-legend.js +236 -0
  39. package/components/essentials/color-scale-legend.js.map +1 -0
  40. package/components/graphs/bar-stacked.d.ts +1 -0
  41. package/components/graphs/bar-stacked.js +16 -0
  42. package/components/graphs/bar-stacked.js.map +1 -1
  43. package/components/graphs/heatmap.d.ts +25 -0
  44. package/components/graphs/heatmap.js +369 -0
  45. package/components/graphs/heatmap.js.map +1 -0
  46. package/components/index.d.ts +2 -0
  47. package/components/index.js +2 -0
  48. package/components/index.js.map +1 -1
  49. package/configuration-non-customizable.d.ts +12 -0
  50. package/configuration-non-customizable.js +13 -0
  51. package/configuration-non-customizable.js.map +1 -1
  52. package/configuration.d.ts +2 -1
  53. package/configuration.js +13 -1
  54. package/configuration.js.map +1 -1
  55. package/demo/data/CHART_TYPES.d.ts +5 -0
  56. package/demo/data/CHART_TYPES.js +5 -0
  57. package/demo/data/CHART_TYPES.js.map +1 -1
  58. package/demo/data/bundle.js +1 -1
  59. package/demo/data/heatmap.d.ts +96 -0
  60. package/demo/data/heatmap.js +1135 -0
  61. package/demo/data/heatmap.js.map +1 -0
  62. package/demo/data/index.d.ts +1 -0
  63. package/demo/data/index.js +30 -0
  64. package/demo/data/index.js.map +1 -1
  65. package/demo/styles.css +16458 -9179
  66. package/demo/styles.css.map +1 -1
  67. package/demo/styles.min.css +1 -1
  68. package/demo/styles.min.css.map +1 -1
  69. package/demo/tsconfig.tsbuildinfo +18 -4
  70. package/interfaces/charts.d.ts +35 -2
  71. package/interfaces/charts.js.map +1 -1
  72. package/interfaces/components.js.map +1 -1
  73. package/interfaces/enums.d.ts +22 -0
  74. package/interfaces/enums.js +25 -0
  75. package/interfaces/enums.js.map +1 -1
  76. package/interfaces/events.d.ts +13 -1
  77. package/interfaces/events.js +13 -0
  78. package/interfaces/events.js.map +1 -1
  79. package/model/cartesian-charts.d.ts +8 -1
  80. package/model/cartesian-charts.js +4 -2
  81. package/model/cartesian-charts.js.map +1 -1
  82. package/model/heatmap.d.ts +57 -0
  83. package/model/heatmap.js +289 -0
  84. package/model/heatmap.js.map +1 -0
  85. package/model/model.d.ts +1 -1
  86. package/model/model.js +1 -1
  87. package/model/model.js.map +1 -1
  88. package/package.json +1 -1
  89. package/services/canvas-zoom.js +1 -1
  90. package/services/canvas-zoom.js.map +1 -1
  91. package/services/scales-cartesian.d.ts +1 -0
  92. package/services/scales-cartesian.js +16 -0
  93. package/services/scales-cartesian.js.map +1 -1
  94. package/styles/_chart-holder.scss +1 -1
  95. package/styles/color-palatte.scss +96 -0
  96. package/styles/colors.scss +35 -1
  97. package/styles/components/_axis.scss +41 -0
  98. package/styles/components/_color-legend.scss +24 -0
  99. package/styles/components/index.scss +1 -0
  100. package/styles/graphs/_heatmap.scss +70 -0
  101. package/styles/graphs/index.scss +1 -0
  102. package/styles-g10.css +2002 -181
  103. package/styles-g10.css.map +1 -1
  104. package/styles-g10.min.css +1 -1
  105. package/styles-g10.min.css.map +1 -1
  106. package/styles-g100.css +2005 -184
  107. package/styles-g100.css.map +1 -1
  108. package/styles-g100.min.css +1 -1
  109. package/styles-g100.min.css.map +1 -1
  110. package/styles-g90.css +2006 -182
  111. package/styles-g90.css.map +1 -1
  112. package/styles-g90.min.css +1 -1
  113. package/styles-g90.min.css.map +1 -1
  114. package/styles.css +2002 -181
  115. package/styles.css.map +1 -1
  116. package/styles.min.css +1 -1
  117. package/styles.min.css.map +1 -1
  118. package/tsconfig.tsbuildinfo +188 -65
@@ -0,0 +1,235 @@
1
+ var __extends = (this && this.__extends) || (function () {
2
+ var extendStatics = function (d, b) {
3
+ extendStatics = Object.setPrototypeOf ||
4
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
6
+ return extendStatics(d, b);
7
+ };
8
+ return function (d, b) {
9
+ extendStatics(d, b);
10
+ function __() { this.constructor = d; }
11
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
12
+ };
13
+ })();
14
+ var __assign = (this && this.__assign) || function () {
15
+ __assign = Object.assign || function(t) {
16
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
17
+ s = arguments[i];
18
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
19
+ t[p] = s[p];
20
+ }
21
+ return t;
22
+ };
23
+ return __assign.apply(this, arguments);
24
+ };
25
+ // Internal Imports
26
+ import { Axis } from './axis';
27
+ import { AxisPositions, Events, ScaleTypes } from '../../interfaces';
28
+ import { DOMUtils } from '../../services';
29
+ import { Tools } from '../../tools';
30
+ import * as Configuration from '../../configuration';
31
+ // D3 Imports
32
+ import { select } from 'd3-selection';
33
+ var HoverAxis = /** @class */ (function (_super) {
34
+ __extends(HoverAxis, _super);
35
+ function HoverAxis(model, services, configs) {
36
+ return _super.call(this, model, services, configs) || this;
37
+ }
38
+ HoverAxis.prototype.render = function (animate) {
39
+ if (animate === void 0) { animate = true; }
40
+ _super.prototype.render.call(this, animate);
41
+ // Remove existing event listeners to avoid flashing behavior
42
+ _super.prototype.destroy.call(this);
43
+ var axisPosition = this.configs.position;
44
+ var svg = this.getComponentContainer();
45
+ var container = DOMUtils.appendOrSelect(svg, "g.axis." + axisPosition);
46
+ var self = this;
47
+ container.selectAll('g.tick').each(function (_, index) {
48
+ var g = select(this);
49
+ g.classed('tick-hover', true).attr('tabindex', index === 0 ? 0 : -1);
50
+ var textNode = g.select('text');
51
+ var _a = DOMUtils.getSVGElementSize(textNode, {
52
+ useBBox: true,
53
+ }), width = _a.width, height = _a.height;
54
+ var rectangle = DOMUtils.appendOrSelect(g, 'rect.axis-holder');
55
+ var x = 0, y = 0;
56
+ // Depending on axis position, apply correct translation & rotation to align the rect
57
+ // with the text
58
+ switch (axisPosition) {
59
+ case AxisPositions.LEFT:
60
+ x = -width + Number(textNode.attr('x'));
61
+ y = -(height / 2);
62
+ break;
63
+ case AxisPositions.RIGHT:
64
+ x = Math.abs(Number(textNode.attr('x')));
65
+ y = -(height / 2);
66
+ break;
67
+ case AxisPositions.TOP:
68
+ x = -(width / 2);
69
+ y = -height + Number(textNode.attr('y')) / 2;
70
+ if (self.truncation[axisPosition]) {
71
+ x = 0;
72
+ rectangle.attr('transform', "rotate(-45)");
73
+ }
74
+ break;
75
+ case AxisPositions.BOTTOM:
76
+ x = -(width / 2);
77
+ y = height / 2 - 2;
78
+ if (self.truncation[axisPosition]) {
79
+ x = -width;
80
+ rectangle.attr('transform', "rotate(-45)");
81
+ }
82
+ break;
83
+ }
84
+ // Translates x position -4 left to keep center after padding
85
+ // Adds padding on left & right
86
+ rectangle
87
+ .attr('x', x - Configuration.axis.hover.rectanglePadding)
88
+ .attr('y', y)
89
+ .attr('width', width + Configuration.axis.hover.rectanglePadding * 2)
90
+ .attr('height', height)
91
+ .lower();
92
+ // Add keyboard event listeners to each group element
93
+ g.on('keydown', function (event) {
94
+ // Choose specific arrow key depending on the axis
95
+ if (axisPosition === AxisPositions.LEFT ||
96
+ axisPosition === AxisPositions.RIGHT) {
97
+ if (event.key && event.key === 'ArrowUp') {
98
+ self.goNext(this, event);
99
+ }
100
+ else if (event.key && event.key === 'ArrowDown') {
101
+ self.goPrevious(this, event);
102
+ }
103
+ }
104
+ else {
105
+ if (event.key && event.key === 'ArrowLeft') {
106
+ self.goPrevious(this, event);
107
+ }
108
+ else if (event.key && event.key === 'ArrowRight') {
109
+ self.goNext(this, event);
110
+ }
111
+ }
112
+ });
113
+ });
114
+ // Add event listeners to element group
115
+ this.addEventListeners();
116
+ };
117
+ HoverAxis.prototype.addEventListeners = function () {
118
+ var svg = this.getComponentContainer();
119
+ var axisPosition = this.configs.position;
120
+ var container = DOMUtils.appendOrSelect(svg, "g.axis." + axisPosition);
121
+ var options = this.getOptions();
122
+ var axisOptions = Tools.getProperty(options, 'axes', axisPosition);
123
+ var axisScaleType = Tools.getProperty(axisOptions, 'scaleType');
124
+ var truncationThreshold = Tools.getProperty(axisOptions, 'truncation', 'threshold');
125
+ var self = this;
126
+ container
127
+ .selectAll('g.tick.tick-hover')
128
+ .on('mouseover', function (event) {
129
+ var hoveredElement = select(this).select('text');
130
+ var datum = hoveredElement.datum();
131
+ // Dispatch mouse event
132
+ self.services.events.dispatchEvent(Events.Axis.LABEL_MOUSEOVER, {
133
+ event: event,
134
+ element: hoveredElement,
135
+ datum: datum,
136
+ });
137
+ if (axisScaleType === ScaleTypes.LABELS &&
138
+ datum.length > truncationThreshold) {
139
+ self.services.events.dispatchEvent(Events.Tooltip.SHOW, {
140
+ event: event,
141
+ element: hoveredElement,
142
+ datum: datum,
143
+ });
144
+ }
145
+ })
146
+ .on('mousemove', function (event) {
147
+ var hoveredElement = select(this).select('text');
148
+ var datum = hoveredElement.datum();
149
+ // Dispatch mouse event
150
+ self.services.events.dispatchEvent(Events.Axis.LABEL_MOUSEMOVE, {
151
+ event: event,
152
+ element: hoveredElement,
153
+ datum: datum,
154
+ });
155
+ self.services.events.dispatchEvent(Events.Tooltip.MOVE, {
156
+ event: event,
157
+ });
158
+ })
159
+ .on('click', function (event) {
160
+ // Dispatch mouse event
161
+ self.services.events.dispatchEvent(Events.Axis.LABEL_CLICK, {
162
+ event: event,
163
+ element: select(this).select('text'),
164
+ datum: select(this).select('text').datum(),
165
+ });
166
+ })
167
+ .on('mouseout', function (event) {
168
+ // Dispatch mouse event
169
+ self.services.events.dispatchEvent(Events.Axis.LABEL_MOUSEOUT, {
170
+ event: event,
171
+ element: select(this).select('text'),
172
+ datum: select(this).select('text').datum(),
173
+ });
174
+ if (axisScaleType === ScaleTypes.LABELS) {
175
+ self.services.events.dispatchEvent(Events.Tooltip.HIDE);
176
+ }
177
+ })
178
+ .on('focus', function (event) {
179
+ var coordinates = { clientX: 0, clientY: 0 };
180
+ if (event.target) {
181
+ // Focus element since we are using arrow keys
182
+ event.target.focus();
183
+ var boundingRect = event.target.getBoundingClientRect();
184
+ coordinates.clientX = boundingRect.x;
185
+ coordinates.clientY = boundingRect.y;
186
+ }
187
+ // Dispatch focus event
188
+ self.services.events.dispatchEvent(Events.Axis.LABEL_FOCUS, {
189
+ event: __assign(__assign({}, event), coordinates),
190
+ element: select(this),
191
+ datum: select(this).select('text').datum(),
192
+ });
193
+ })
194
+ .on('blur', function (event) {
195
+ // Dispatch blur event
196
+ self.services.events.dispatchEvent(Events.Axis.LABEL_BLUR, {
197
+ event: event,
198
+ element: select(this),
199
+ datum: select(this).select('text').datum(),
200
+ });
201
+ });
202
+ };
203
+ // Focus on the next HTML element sibling
204
+ HoverAxis.prototype.goNext = function (element, event) {
205
+ if (element.nextElementSibling &&
206
+ element.nextElementSibling.tagName !== 'path') {
207
+ element.nextElementSibling.dispatchEvent(new Event('focus'));
208
+ }
209
+ event.preventDefault();
210
+ };
211
+ // Focus on the previous HTML element sibling
212
+ HoverAxis.prototype.goPrevious = function (element, event) {
213
+ if (element.previousElementSibling &&
214
+ element.previousElementSibling.tagName !== 'path') {
215
+ element.previousElementSibling.dispatchEvent(new Event('focus'));
216
+ }
217
+ event.preventDefault();
218
+ };
219
+ HoverAxis.prototype.destroy = function () {
220
+ var svg = this.getComponentContainer();
221
+ var axisPosition = this.configs.position;
222
+ var container = DOMUtils.appendOrSelect(svg, "g.axis." + axisPosition);
223
+ // Remove event listeners
224
+ container
225
+ .selectAll('g.tick.tick-hover')
226
+ .on('mouseover', null)
227
+ .on('mousemove', null)
228
+ .on('mouseout', null)
229
+ .on('focus', null)
230
+ .on('blur', null);
231
+ };
232
+ return HoverAxis;
233
+ }(Axis));
234
+ export { HoverAxis };
235
+ //# sourceMappingURL=../../../src/components/axes/hover-axis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hover-axis.js","sourceRoot":"","sources":["hover-axis.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Axis } from './axis';\nimport { AxisPositions, Events, ScaleTypes } from '../../interfaces';\nimport { ChartModel } from '../../model/model';\nimport { DOMUtils } from '../../services';\nimport { Tools } from '../../tools';\nimport * as Configuration from '../../configuration';\n\n// D3 Imports\nimport { select } from 'd3-selection';\n\nexport class HoverAxis extends Axis {\n\tconstructor(model: ChartModel, services: any, configs?: any) {\n\t\tsuper(model, services, configs);\n\t}\n\n\trender(animate = true) {\n\t\tsuper.render(animate);\n\n\t\t// Remove existing event listeners to avoid flashing behavior\n\t\tsuper.destroy();\n\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst svg = this.getComponentContainer();\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\n\t\tconst self = this;\n\t\tcontainer.selectAll('g.tick').each(function (_, index) {\n\t\t\tconst g = select(this);\n\t\t\tg.classed('tick-hover', true).attr(\n\t\t\t\t'tabindex',\n\t\t\t\tindex === 0 ? 0 : -1\n\t\t\t);\n\t\t\tconst textNode = g.select('text');\n\t\t\tconst { width, height } = DOMUtils.getSVGElementSize(textNode, {\n\t\t\t\tuseBBox: true,\n\t\t\t});\n\n\t\t\tconst rectangle = DOMUtils.appendOrSelect(g, 'rect.axis-holder');\n\n\t\t\tlet x = 0,\n\t\t\t\ty = 0;\n\n\t\t\t// Depending on axis position, apply correct translation & rotation to align the rect\n\t\t\t// with the text\n\t\t\tswitch (axisPosition) {\n\t\t\t\tcase AxisPositions.LEFT:\n\t\t\t\t\tx = -width + Number(textNode.attr('x'));\n\t\t\t\t\ty = -(height / 2);\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.RIGHT:\n\t\t\t\t\tx = Math.abs(Number(textNode.attr('x')));\n\t\t\t\t\ty = -(height / 2);\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.TOP:\n\t\t\t\t\tx = -(width / 2);\n\t\t\t\t\ty = -height + Number(textNode.attr('y')) / 2;\n\n\t\t\t\t\tif (self.truncation[axisPosition]) {\n\t\t\t\t\t\tx = 0;\n\t\t\t\t\t\trectangle.attr('transform', `rotate(-45)`);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase AxisPositions.BOTTOM:\n\t\t\t\t\tx = -(width / 2);\n\t\t\t\t\ty = height / 2 - 2;\n\n\t\t\t\t\tif (self.truncation[axisPosition]) {\n\t\t\t\t\t\tx = -width;\n\t\t\t\t\t\trectangle.attr('transform', `rotate(-45)`);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Translates x position -4 left to keep center after padding\n\t\t\t// Adds padding on left & right\n\t\t\trectangle\n\t\t\t\t.attr('x', x - Configuration.axis.hover.rectanglePadding)\n\t\t\t\t.attr('y', y)\n\t\t\t\t.attr(\n\t\t\t\t\t'width',\n\t\t\t\t\twidth + Configuration.axis.hover.rectanglePadding * 2\n\t\t\t\t)\n\t\t\t\t.attr('height', height)\n\t\t\t\t.lower();\n\n\t\t\t// Add keyboard event listeners to each group element\n\t\t\tg.on('keydown', function (event: KeyboardEvent) {\n\t\t\t\t// Choose specific arrow key depending on the axis\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\tif (event.key && event.key === 'ArrowUp') {\n\t\t\t\t\t\tself.goNext(this as HTMLElement, event);\n\t\t\t\t\t} else if (event.key && event.key === 'ArrowDown') {\n\t\t\t\t\t\tself.goPrevious(this as HTMLElement, event);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (event.key && event.key === 'ArrowLeft') {\n\t\t\t\t\t\tself.goPrevious(this as HTMLElement, event);\n\t\t\t\t\t} else if (event.key && event.key === 'ArrowRight') {\n\t\t\t\t\t\tself.goNext(this as HTMLElement, event);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t// Add event listeners to element group\n\t\tthis.addEventListeners();\n\t}\n\n\taddEventListeners() {\n\t\tconst svg = this.getComponentContainer();\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\t\tconst options = this.getOptions();\n\t\tconst axisOptions = Tools.getProperty(options, 'axes', axisPosition);\n\t\tconst axisScaleType = Tools.getProperty(axisOptions, 'scaleType');\n\t\tconst truncationThreshold = Tools.getProperty(\n\t\t\taxisOptions,\n\t\t\t'truncation',\n\t\t\t'threshold'\n\t\t);\n\n\t\tconst self = this;\n\t\tcontainer\n\t\t\t.selectAll('g.tick.tick-hover')\n\t\t\t.on('mouseover', function (event) {\n\t\t\t\tconst hoveredElement = select(this).select('text');\n\t\t\t\tconst datum = hoveredElement.datum() as string;\n\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Axis.LABEL_MOUSEOVER,\n\t\t\t\t\t{\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\t\tdatum,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tif (\n\t\t\t\t\taxisScaleType === ScaleTypes.LABELS &&\n\t\t\t\t\tdatum.length > truncationThreshold\n\t\t\t\t) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\t\tdatum,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('mousemove', function (event) {\n\t\t\t\tconst hoveredElement = select(this).select('text');\n\t\t\t\tconst datum = hoveredElement.datum() as string;\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Axis.LABEL_MOUSEMOVE,\n\t\t\t\t\t{\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\telement: hoveredElement,\n\t\t\t\t\t\tdatum,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.MOVE, {\n\t\t\t\t\tevent,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('click', function (event) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Axis.LABEL_CLICK, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: select(this).select('text'),\n\t\t\t\t\tdatum: select(this).select('text').datum(),\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('mouseout', function (event) {\n\t\t\t\t// Dispatch mouse event\n\t\t\t\tself.services.events.dispatchEvent(Events.Axis.LABEL_MOUSEOUT, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: select(this).select('text'),\n\t\t\t\t\tdatum: select(this).select('text').datum(),\n\t\t\t\t});\n\n\t\t\t\tif (axisScaleType === ScaleTypes.LABELS) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('focus', function (event) {\n\t\t\t\tconst coordinates = { clientX: 0, clientY: 0 };\n\n\t\t\t\tif (event.target) {\n\t\t\t\t\t// Focus element since we are using arrow keys\n\t\t\t\t\tevent.target.focus();\n\t\t\t\t\tconst boundingRect = event.target.getBoundingClientRect();\n\t\t\t\t\tcoordinates.clientX = boundingRect.x;\n\t\t\t\t\tcoordinates.clientY = boundingRect.y;\n\t\t\t\t}\n\n\t\t\t\t// Dispatch focus event\n\t\t\t\tself.services.events.dispatchEvent(Events.Axis.LABEL_FOCUS, {\n\t\t\t\t\tevent: { ...event, ...coordinates },\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum: select(this).select('text').datum(),\n\t\t\t\t});\n\t\t\t})\n\t\t\t.on('blur', function (event) {\n\t\t\t\t// Dispatch blur event\n\t\t\t\tself.services.events.dispatchEvent(Events.Axis.LABEL_BLUR, {\n\t\t\t\t\tevent,\n\t\t\t\t\telement: select(this),\n\t\t\t\t\tdatum: select(this).select('text').datum(),\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\t// Focus on the next HTML element sibling\n\tprivate goNext(element: HTMLElement, event: Event) {\n\t\tif (\n\t\t\telement.nextElementSibling &&\n\t\t\telement.nextElementSibling.tagName !== 'path'\n\t\t) {\n\t\t\telement.nextElementSibling.dispatchEvent(new Event('focus'));\n\t\t}\n\n\t\tevent.preventDefault();\n\t}\n\n\t// Focus on the previous HTML element sibling\n\tprivate goPrevious(element: HTMLElement, event: Event) {\n\t\tif (\n\t\t\telement.previousElementSibling &&\n\t\t\telement.previousElementSibling.tagName !== 'path'\n\t\t) {\n\t\t\telement.previousElementSibling.dispatchEvent(new Event('focus'));\n\t\t}\n\n\t\tevent.preventDefault();\n\t}\n\n\tdestroy() {\n\t\tconst svg = this.getComponentContainer();\n\t\tconst { position: axisPosition } = this.configs;\n\t\tconst container = DOMUtils.appendOrSelect(\n\t\t\tsvg,\n\t\t\t`g.axis.${axisPosition}`\n\t\t);\n\n\t\t// Remove event listeners\n\t\tcontainer\n\t\t\t.selectAll('g.tick.tick-hover')\n\t\t\t.on('mouseover', null)\n\t\t\t.on('mousemove', null)\n\t\t\t.on('mouseout', null)\n\t\t\t.on('focus', null)\n\t\t\t.on('blur', null);\n\t}\n}\n"]}
@@ -13,11 +13,12 @@ var __extends = (this && this.__extends) || (function () {
13
13
  })();
14
14
  // Internal Imports
15
15
  import { Component } from '../component';
16
- import { AxisPositions, RenderTypes, } from '../../interfaces';
16
+ import { AxisPositions, RenderTypes, AxisFlavor } from '../../interfaces';
17
17
  import { Axis } from './axis';
18
18
  import { Tools } from '../../tools';
19
19
  import { DOMUtils } from '../../services';
20
20
  import { Events } from './../../interfaces';
21
+ import { HoverAxis } from './hover-axis';
21
22
  var TwoDimensionalAxes = /** @class */ (function (_super) {
22
23
  __extends(TwoDimensionalAxes, _super);
23
24
  function TwoDimensionalAxes() {
@@ -52,11 +53,14 @@ var TwoDimensionalAxes = /** @class */ (function (_super) {
52
53
  var axisPosition = AxisPositions[axisPositionKey];
53
54
  if (_this.configs.axes[axisPosition] &&
54
55
  !_this.children[axisPosition]) {
55
- var axisComponent = new Axis(_this.model, _this.services, {
56
+ var configs = {
56
57
  position: axisPosition,
57
58
  axes: _this.configs.axes,
58
59
  margins: _this.margins,
59
- });
60
+ };
61
+ var axisComponent = _this.model.axisFlavor === AxisFlavor.DEFAULT
62
+ ? new Axis(_this.model, _this.services, configs)
63
+ : new HoverAxis(_this.model, _this.services, configs);
60
64
  // Set model, services & parent for the new axis component
61
65
  axisComponent.setModel(_this.model);
62
66
  axisComponent.setServices(_this.services);
@@ -107,6 +111,7 @@ var TwoDimensionalAxes = /** @class */ (function (_super) {
107
111
  break;
108
112
  }
109
113
  });
114
+ this.services.events.dispatchEvent(Events.Axis.RENDER_COMPLETE);
110
115
  // If the new margins are different than the existing ones
111
116
  var isNotEqual = Object.keys(margins).some(function (marginKey) {
112
117
  return _this.margins[marginKey] !== margins[marginKey];
@@ -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 {\n\tAxisPositions,\n\tScaleTypes,\n\tAxesOptions,\n\tRenderTypes,\n} 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\trenderType = RenderTypes.SVG;\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(child.getTitleRef(), {\n\t\t\t\t\tuseBBox: true,\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\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"]}
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, RenderTypes, AxisFlavor } from '../../interfaces';\nimport { Axis } from './axis';\nimport { Tools } from '../../tools';\nimport { DOMUtils } from '../../services';\nimport { Threshold } from '../essentials/threshold';\nimport { Events } from './../../interfaces';\nimport { HoverAxis } from './hover-axis';\n\nexport class TwoDimensionalAxes extends Component {\n\ttype = '2D-axes';\n\trenderType = RenderTypes.SVG;\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 configs = {\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\tconst axisComponent =\n\t\t\t\t\tthis.model.axisFlavor === AxisFlavor.DEFAULT\n\t\t\t\t\t\t? new Axis(this.model, this.services, configs)\n\t\t\t\t\t\t: new HoverAxis(this.model, this.services, configs);\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(child.getTitleRef(), {\n\t\t\t\t\tuseBBox: true,\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\t\t});\n\n\t\tthis.services.events.dispatchEvent(Events.Axis.RENDER_COMPLETE);\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"]}
@@ -0,0 +1,11 @@
1
+ import { RenderTypes } from '../../interfaces';
2
+ import { Legend } from './legend';
3
+ export declare class ColorScaleLegend extends Legend {
4
+ type: string;
5
+ renderType: RenderTypes;
6
+ private gradient_id;
7
+ init(): void;
8
+ handleAxisComplete: (event: CustomEvent<any>) => void;
9
+ render(animate?: boolean): void;
10
+ destroy(): void;
11
+ }
@@ -0,0 +1,236 @@
1
+ var __extends = (this && this.__extends) || (function () {
2
+ var extendStatics = function (d, b) {
3
+ extendStatics = Object.setPrototypeOf ||
4
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
6
+ return extendStatics(d, b);
7
+ };
8
+ return function (d, b) {
9
+ extendStatics(d, b);
10
+ function __() { this.constructor = d; }
11
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
12
+ };
13
+ })();
14
+ // Internal Imports
15
+ import { Tools } from '../../tools';
16
+ import { ColorLegendType, Events, RenderTypes } from '../../interfaces';
17
+ import * as Configuration from '../../configuration';
18
+ import { Legend } from './legend';
19
+ import { DOMUtils } from '../../services';
20
+ // D3 imports
21
+ import { axisBottom } from 'd3-axis';
22
+ import { scaleBand, scaleLinear } from 'd3-scale';
23
+ import { interpolateRound, quantize } from 'd3-interpolate';
24
+ var ColorScaleLegend = /** @class */ (function (_super) {
25
+ __extends(ColorScaleLegend, _super);
26
+ function ColorScaleLegend() {
27
+ var _this = _super !== null && _super.apply(this, arguments) || this;
28
+ _this.type = 'color-legend';
29
+ _this.renderType = RenderTypes.SVG;
30
+ _this.gradient_id = 'gradient-id-' + Math.floor(Math.random() * 99999999999);
31
+ _this.handleAxisComplete = function (event) {
32
+ var svg = _this.getComponentContainer();
33
+ var width = DOMUtils.getSVGElementSize(svg, {
34
+ useAttrs: true,
35
+ }).width;
36
+ var isDataLoading = Tools.getProperty(_this.getOptions(), 'data', 'loading');
37
+ if (width > Configuration.legend.color.barWidth && !isDataLoading) {
38
+ var title = Tools.getProperty(_this.getOptions(), 'heatmap', 'colorLegend', 'title');
39
+ var cartesianScales = _this.services.cartesianScales;
40
+ // Get available chart area
41
+ var mainXScale = cartesianScales.getMainXScale();
42
+ var xDimensions = mainXScale.range();
43
+ // Align legend with the axis
44
+ if (xDimensions[0] > 1) {
45
+ svg.select('g.legend').attr('transform', "translate(" + xDimensions[0] + ", 0)");
46
+ if (title) {
47
+ var textWidth = DOMUtils.getSVGElementSize(svg.select('g.legend-title').select('text'), { useBBox: true }).width;
48
+ // -9 since LEFT y-axis labels are moved towards the left by 9 by d3
49
+ var availableSpace = xDimensions[0] - textWidth - 9;
50
+ // If space is available align the the label with the axis labels
51
+ if (availableSpace > 1) {
52
+ svg.select('g.legend-title').attr('transform', "translate(" + availableSpace + ", 0)");
53
+ }
54
+ else {
55
+ // Move the legend down by 16 pixels to display legend text on top
56
+ svg.select('g.legend').attr('transform', "translate(" + xDimensions[0] + ", 16)");
57
+ // Align legend title with start of axis
58
+ svg.select('g.legend-title').attr('transform', "translate(" + xDimensions[0] + ", 0)");
59
+ }
60
+ }
61
+ }
62
+ }
63
+ };
64
+ return _this;
65
+ }
66
+ ColorScaleLegend.prototype.init = function () {
67
+ var eventsFragment = this.services.events;
68
+ // Highlight correct circle on legend item hovers
69
+ eventsFragment.addEventListener(Events.Axis.RENDER_COMPLETE, this.handleAxisComplete);
70
+ };
71
+ ColorScaleLegend.prototype.render = function (animate) {
72
+ if (animate === void 0) { animate = false; }
73
+ var options = this.getOptions();
74
+ var customColors = Tools.getProperty(options, 'color', 'gradient', 'colors');
75
+ var colorScaleType = Tools.getProperty(options, 'heatmap', 'colorLegend', 'type');
76
+ var colorPairingOption = Tools.getProperty(options, 'color', 'pairing', 'option');
77
+ var title = Tools.getProperty(options, 'heatmap', 'colorLegend', 'title');
78
+ var customColorsEnabled = !Tools.isEmpty(customColors);
79
+ var domain = this.model.getValueDomain();
80
+ var svg = this.getComponentContainer();
81
+ // Clear DOM if loading
82
+ var isDataLoading = Tools.getProperty(this.getOptions(), 'data', 'loading');
83
+ if (isDataLoading) {
84
+ svg.html('');
85
+ return;
86
+ }
87
+ var legend = DOMUtils.appendOrSelect(svg, 'g.legend');
88
+ var axis = DOMUtils.appendOrSelect(legend, 'g.legend-axis');
89
+ var width = DOMUtils.getSVGElementSize(svg, {
90
+ useAttrs: true,
91
+ }).width;
92
+ var barWidth = Configuration.legend.color.barWidth;
93
+ if (width <= Configuration.legend.color.barWidth) {
94
+ barWidth = width;
95
+ }
96
+ if (title) {
97
+ var legendTitleGroup = DOMUtils.appendOrSelect(svg, 'g.legend-title');
98
+ var legendTitle = DOMUtils.appendOrSelect(legendTitleGroup, 'text');
99
+ legendTitle.text(title).attr('dy', '0.7em');
100
+ // Move the legend down by 16 pixels to display legend text on top
101
+ legend.attr('transform', "translate(0, 16)");
102
+ }
103
+ // If domain consists of negative and positive values, use diverging palettes
104
+ var colorScheme = domain[0] < 0 && domain[1] > 0 ? 'diverge' : 'mono';
105
+ // Use default color pairing options if not in defined range
106
+ if (colorPairingOption < 1 &&
107
+ colorPairingOption > 4 &&
108
+ colorScheme === 'mono') {
109
+ colorPairingOption = 1;
110
+ }
111
+ else if (colorPairingOption < 1 &&
112
+ colorPairingOption > 2 &&
113
+ colorScheme === 'diverge') {
114
+ colorPairingOption = 1;
115
+ }
116
+ var colorPairing = [];
117
+ // Carbon charts has 11 colors for a single monochromatic palette & 17 for a divergent palette
118
+ var colorGroupingLength = colorScheme === 'diverge' ? 17 : 11;
119
+ if (!customColorsEnabled) {
120
+ // Add class names to list and the amount based on the color scheme
121
+ for (var i = 1; i < colorGroupingLength + 1; i++) {
122
+ colorPairing.push(colorScaleType === ColorLegendType.LINEAR
123
+ ? "stop-color-" + colorScheme + "-" + colorPairingOption + "-" + i
124
+ : "fill-" + colorScheme + "-" + colorPairingOption + "-" + i);
125
+ }
126
+ }
127
+ else {
128
+ // Use custom colors
129
+ colorPairing = customColors;
130
+ }
131
+ if (colorScaleType === ColorLegendType.LINEAR) {
132
+ var stopLengthPercentage_1 = 100 / (colorPairing.length - 1);
133
+ // Generate the gradient
134
+ var linearGradient = DOMUtils.appendOrSelect(legend, 'linearGradient');
135
+ linearGradient
136
+ .attr('id', this.gradient_id + "-legend")
137
+ .selectAll('stop')
138
+ .data(colorPairing)
139
+ .enter()
140
+ .append('stop')
141
+ .attr('offset', function (_, i) { return i * stopLengthPercentage_1 + "%"; })
142
+ .attr('class', function (_, i) { return colorPairing[i]; })
143
+ .attr('stop-color', function (d) { return d; });
144
+ // Create the legend container
145
+ var rectangle = DOMUtils.appendOrSelect(legend, 'rect');
146
+ rectangle
147
+ .attr('width', barWidth)
148
+ .attr('height', Configuration.legend.color.barHeight)
149
+ .style('fill', "url(#" + this.gradient_id + "-legend)");
150
+ // Create scale & ticks
151
+ var linearScale = scaleLinear()
152
+ .domain(domain)
153
+ .range([0, barWidth]);
154
+ domain.splice(1, 0, (domain[0] + domain[1]) / 2);
155
+ var xAxis = axisBottom(linearScale)
156
+ .tickSize(0)
157
+ .tickValues(domain);
158
+ // Align axes at the bottom of the rectangle and delete the domain line
159
+ axis.attr('transform', "translate(0," + Configuration.legend.color.axisYTranslation + ")").call(xAxis);
160
+ // Remove domain
161
+ axis.select('.domain').remove();
162
+ // Align text to fit in container
163
+ axis.style('text-anchor', 'start');
164
+ }
165
+ else if (colorScaleType === ColorLegendType.QUANTIZE) {
166
+ // Generate equal chunks between range to act as ticks
167
+ var interpolator = interpolateRound(domain[0], domain[1]);
168
+ var quant_1 = quantize(interpolator, colorPairing.length);
169
+ // If divergent && non-custom color, remove 0/white from being displayed
170
+ if (!customColorsEnabled && colorScheme === 'diverge') {
171
+ colorPairing.splice(colorPairing.length / 2, 1);
172
+ }
173
+ var colorScaleBand_1 = scaleBand()
174
+ .domain(colorPairing)
175
+ .range([0, barWidth]);
176
+ // Render the quantized rectangles
177
+ var rectangle = DOMUtils.appendOrSelect(legend, 'g.quantized-rect');
178
+ rectangle
179
+ .selectAll('rect')
180
+ .data(colorScaleBand_1.domain())
181
+ .join('rect')
182
+ .attr('x', function (d) { return colorScaleBand_1(d); })
183
+ .attr('y', 0)
184
+ .attr('width', Math.max(0, colorScaleBand_1.bandwidth()) - 1)
185
+ .attr('height', Configuration.legend.color.barHeight)
186
+ .attr('class', function (d) { return d; })
187
+ .attr('fill', function (d) { return d; });
188
+ var xAxis = axisBottom(colorScaleBand_1)
189
+ .tickSize(0)
190
+ .tickValues(colorPairing)
191
+ .tickFormat(function (_, i) {
192
+ // Display every other tick to create space
193
+ if (!customColorsEnabled &&
194
+ ((i + 1) % 2 === 0 || i === colorPairing.length - 1)) {
195
+ return null;
196
+ }
197
+ // Use the quant interpolators as ticks
198
+ return quant_1[i].toString();
199
+ });
200
+ // Align axis to match bandwidth start after initial (white)
201
+ var axisTranslation = colorScaleBand_1.bandwidth() / 2;
202
+ axis.attr('transform', "translate(" + (!customColorsEnabled && colorScheme === 'diverge' ? '-' : '') + axisTranslation + ", " + Configuration.legend.color.axisYTranslation + ")").call(xAxis);
203
+ // Append the last tick
204
+ var firstTick = axis.select('g.tick').clone(true);
205
+ firstTick
206
+ .attr('transform', "translate(" + (barWidth +
207
+ (!customColorsEnabled && colorScheme === 'diverge'
208
+ ? axisTranslation
209
+ : -axisTranslation)) + ", 0)")
210
+ .classed('final-tick', true)
211
+ .select('text')
212
+ .text(quant_1[quant_1.length - 1]);
213
+ axis.enter().append(firstTick.node());
214
+ axis.select('.domain').remove();
215
+ }
216
+ else {
217
+ throw Error('Entered color legend type is not supported.');
218
+ }
219
+ // Translate last axis tick if barWidth equals chart width
220
+ if (width <= Configuration.legend.color.barWidth) {
221
+ var lastTick = axis.select('g.tick:last-of-type text');
222
+ var width_1 = DOMUtils.getSVGElementSize(lastTick, {
223
+ useBBox: true,
224
+ }).width;
225
+ lastTick.attr('x', "-" + width_1);
226
+ }
227
+ };
228
+ ColorScaleLegend.prototype.destroy = function () {
229
+ // Remove legend listeners
230
+ var eventsFragment = this.services.events;
231
+ eventsFragment.removeEventListener(Events.Axis.RENDER_COMPLETE, this.handleAxisComplete);
232
+ };
233
+ return ColorScaleLegend;
234
+ }(Legend));
235
+ export { ColorScaleLegend };
236
+ //# sourceMappingURL=../../../src/components/essentials/color-scale-legend.js.map