@carbon/charts 0.53.3 → 0.54.1
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.
- package/CHANGELOG.md +44 -0
- package/build/demo/data/CHART_TYPES.d.ts +5 -0
- package/build/demo/data/heatmap.d.ts +96 -0
- package/build/demo/data/index.d.ts +1 -0
- package/build/src/charts/heatmap.d.ts +10 -0
- package/build/src/charts/index.d.ts +1 -0
- package/build/src/components/axes/axis.d.ts +7 -1
- package/build/src/components/axes/hover-axis.d.ts +10 -0
- package/build/src/components/axes/toolbar.d.ts +5 -1
- package/build/src/components/essentials/color-scale-legend.d.ts +11 -0
- package/build/src/components/graphs/heatmap.d.ts +25 -0
- package/build/src/components/index.d.ts +2 -0
- package/build/src/configuration-non-customizable.d.ts +12 -0
- package/build/src/configuration.d.ts +2 -1
- package/build/src/interfaces/charts.d.ts +35 -2
- package/build/src/interfaces/components.d.ts +19 -0
- package/build/src/interfaces/enums.d.ts +24 -1
- package/build/src/interfaces/events.d.ts +15 -2
- package/build/src/model/cartesian-charts.d.ts +8 -1
- package/build/src/model/heatmap.d.ts +57 -0
- package/build/src/services/scales-cartesian.d.ts +1 -0
- package/bundle.js +1 -1
- package/charts/heatmap.d.ts +10 -0
- package/charts/heatmap.js +138 -0
- package/charts/heatmap.js.map +1 -0
- package/charts/index.d.ts +1 -0
- package/charts/index.js +1 -0
- package/charts/index.js.map +1 -1
- package/components/axes/axis.d.ts +7 -1
- package/components/axes/axis.js +9 -2
- package/components/axes/axis.js.map +1 -1
- package/components/axes/hover-axis.d.ts +10 -0
- package/components/axes/hover-axis.js +235 -0
- package/components/axes/hover-axis.js.map +1 -0
- package/components/axes/toolbar.d.ts +5 -1
- package/components/axes/toolbar.js +94 -34
- package/components/axes/toolbar.js.map +1 -1
- package/components/axes/two-dimensional-axes.js +8 -3
- package/components/axes/two-dimensional-axes.js.map +1 -1
- package/components/essentials/color-scale-legend.d.ts +11 -0
- package/components/essentials/color-scale-legend.js +236 -0
- package/components/essentials/color-scale-legend.js.map +1 -0
- package/components/graphs/heatmap.d.ts +25 -0
- package/components/graphs/heatmap.js +369 -0
- package/components/graphs/heatmap.js.map +1 -0
- package/components/index.d.ts +2 -0
- package/components/index.js +2 -0
- package/components/index.js.map +1 -1
- package/configuration-non-customizable.d.ts +12 -0
- package/configuration-non-customizable.js +13 -0
- package/configuration-non-customizable.js.map +1 -1
- package/configuration.d.ts +2 -1
- package/configuration.js +13 -1
- package/configuration.js.map +1 -1
- package/demo/data/CHART_TYPES.d.ts +5 -0
- package/demo/data/CHART_TYPES.js +5 -0
- package/demo/data/CHART_TYPES.js.map +1 -1
- package/demo/data/bundle.js +1 -1
- package/demo/data/heatmap.d.ts +96 -0
- package/demo/data/heatmap.js +1135 -0
- package/demo/data/heatmap.js.map +1 -0
- package/demo/data/index.d.ts +1 -0
- package/demo/data/index.js +30 -0
- package/demo/data/index.js.map +1 -1
- package/demo/data/toolbar.js +12 -0
- package/demo/data/toolbar.js.map +1 -1
- package/demo/styles.css +16458 -9179
- package/demo/styles.css.map +1 -1
- package/demo/styles.min.css +1 -1
- package/demo/styles.min.css.map +1 -1
- package/demo/tsconfig.tsbuildinfo +19 -5
- package/interfaces/charts.d.ts +35 -2
- package/interfaces/charts.js.map +1 -1
- package/interfaces/components.d.ts +19 -0
- package/interfaces/components.js.map +1 -1
- package/interfaces/enums.d.ts +24 -1
- package/interfaces/enums.js +26 -0
- package/interfaces/enums.js.map +1 -1
- package/interfaces/events.d.ts +15 -2
- package/interfaces/events.js +14 -0
- package/interfaces/events.js.map +1 -1
- package/model/cartesian-charts.d.ts +8 -1
- package/model/cartesian-charts.js +4 -2
- package/model/cartesian-charts.js.map +1 -1
- package/model/heatmap.d.ts +57 -0
- package/model/heatmap.js +289 -0
- package/model/heatmap.js.map +1 -0
- package/package.json +1 -1
- package/services/canvas-zoom.js +1 -1
- package/services/canvas-zoom.js.map +1 -1
- package/services/scales-cartesian.d.ts +1 -0
- package/services/scales-cartesian.js +16 -0
- package/services/scales-cartesian.js.map +1 -1
- package/services/zoom.js +5 -0
- package/services/zoom.js.map +1 -1
- package/styles/color-palatte.scss +96 -0
- package/styles/colors.scss +35 -1
- package/styles/components/_axis.scss +41 -0
- package/styles/components/_color-legend.scss +24 -0
- package/styles/components/index.scss +1 -0
- package/styles/graphs/_heatmap.scss +70 -0
- package/styles/graphs/index.scss +1 -0
- package/styles-g10.css +2000 -179
- package/styles-g10.css.map +1 -1
- package/styles-g10.min.css +1 -1
- package/styles-g10.min.css.map +1 -1
- package/styles-g100.css +2003 -182
- package/styles-g100.css.map +1 -1
- package/styles-g100.min.css +1 -1
- package/styles-g100.min.css.map +1 -1
- package/styles-g90.css +2004 -180
- package/styles-g90.css.map +1 -1
- package/styles-g90.min.css +1 -1
- package/styles-g90.min.css.map +1 -1
- package/styles.css +2000 -179
- package/styles.css.map +1 -1
- package/styles.min.css +1 -1
- package/styles.min.css.map +1 -1
- package/tsconfig.tsbuildinfo +187 -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"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Component } from '../component';
|
|
2
2
|
import { RenderTypes, ToolbarControlTypes } from '../../interfaces';
|
|
3
3
|
export declare class Toolbar extends Component {
|
|
4
|
+
static buttonID: number;
|
|
4
5
|
type: string;
|
|
5
6
|
renderType: RenderTypes;
|
|
6
7
|
overflowButton: any;
|
|
@@ -15,6 +16,7 @@ export declare class Toolbar extends Component {
|
|
|
15
16
|
focusOnPreviousEnabledMenuItem(currentItemIndex: any): void;
|
|
16
17
|
focusOnNextEnabledMenuItem(currentItemIndex: any): void;
|
|
17
18
|
toggleOverflowMenu(event: any): void;
|
|
19
|
+
triggerFunctionAndEvent(control: any, event: any, element?: any): void;
|
|
18
20
|
getControlConfigs(): {
|
|
19
21
|
buttonList: any[];
|
|
20
22
|
overflowMenuItemList?: undefined;
|
|
@@ -28,7 +30,9 @@ export declare class Toolbar extends Component {
|
|
|
28
30
|
id: string;
|
|
29
31
|
title: string;
|
|
30
32
|
shouldBeDisabled: () => boolean;
|
|
31
|
-
|
|
33
|
+
iconSVG: {
|
|
34
|
+
content: string;
|
|
35
|
+
};
|
|
32
36
|
clickFunction: (event: any) => void;
|
|
33
37
|
};
|
|
34
38
|
getControlConfigByType(controlType: ToolbarControlTypes): any;
|
|
@@ -78,23 +78,26 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
78
78
|
var self_1 = this;
|
|
79
79
|
var allToolbarControls = enteringToolbarControls
|
|
80
80
|
.merge(toolbarControls)
|
|
81
|
-
.classed('disabled', function (d) {
|
|
82
|
-
|
|
83
|
-
})
|
|
84
|
-
.attr('aria-disabled', function (d) {
|
|
85
|
-
return d.shouldBeDisabled ? d.shouldBeDisabled() : false;
|
|
86
|
-
})
|
|
81
|
+
.classed('disabled', function (d) { return d.shouldBeDisabled(); })
|
|
82
|
+
.attr('aria-disabled', function (d) { return d.shouldBeDisabled(); })
|
|
87
83
|
.attr('aria-label', function (d) { return d.title; })
|
|
88
|
-
.html(function (d) { return "\n\t\t\t<button\n\t\t\t\tclass=\"bx--overflow-menu__trigger\"\n\t\t\t\taria-haspopup=\"true\" aria-expanded=\"false\" id=\"" + _this.services.domUtils.generateElementIDString("control-" + d.id) + "\" aria-label=\"" + d.title + "\">\n\t\t\t\t<svg focusable=\"false\" preserveAspectRatio=\"xMidYMid meet\" style=\"will-change: transform; width: " + (d.
|
|
84
|
+
.html(function (d) { return "\n\t\t\t<button\n\t\t\t\tclass=\"bx--overflow-menu__trigger\"\n\t\t\t\taria-haspopup=\"true\" aria-expanded=\"false\" id=\"" + _this.services.domUtils.generateElementIDString("control-" + d.id) + "\" aria-label=\"" + d.title + "\">\n\t\t\t\t<svg focusable=\"false\" preserveAspectRatio=\"xMidYMid meet\" style=\"will-change: transform; width: " + (d.iconSVG.width !== undefined ? d.iconSVG.width : '20px') + "; height: " + (d.iconSVG.height !== undefined
|
|
85
|
+
? d.iconSVG.height
|
|
86
|
+
: '20px') + "\" xmlns=\"http://www.w3.org/2000/svg\" class=\"bx--overflow-menu__icon\" viewBox=\"0 0 32 32\" aria-hidden=\"true\">\n\t\t\t\t\t" + d.iconSVG.content + "\n\t\t\t\t</svg>\n\t\t\t</button>"; })
|
|
89
87
|
.each(function (d, index) {
|
|
88
|
+
var _this = this;
|
|
90
89
|
select(this)
|
|
91
90
|
.select('button')
|
|
92
|
-
.on('click',
|
|
91
|
+
.on('click', function (event) {
|
|
92
|
+
if (!d.shouldBeDisabled()) {
|
|
93
|
+
self_1.triggerFunctionAndEvent(d, event, _this);
|
|
94
|
+
}
|
|
95
|
+
})
|
|
93
96
|
.on('keydown', function (event) {
|
|
94
97
|
if ((event.key && event.key === 'Enter') ||
|
|
95
98
|
event.key === ' ') {
|
|
96
99
|
event.preventDefault();
|
|
97
|
-
|
|
100
|
+
self_1.triggerFunctionAndEvent(d, event, _this);
|
|
98
101
|
}
|
|
99
102
|
else if (event.key && event.key === 'ArrowLeft') {
|
|
100
103
|
self_1.focusOnPreviousEnabledToolbarItem(index);
|
|
@@ -248,15 +251,13 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
248
251
|
var element = select("#" + _this.services.domUtils.generateElementIDString("control-" + menuItem.id));
|
|
249
252
|
if (element !== null) {
|
|
250
253
|
element.on('click', function () {
|
|
251
|
-
|
|
252
|
-
menuItem.clickFunction();
|
|
254
|
+
self_2.triggerFunctionAndEvent(menuItem, event, element.node());
|
|
253
255
|
// hide overflow menu
|
|
254
256
|
self_2.updateOverflowMenu(false);
|
|
255
257
|
});
|
|
256
258
|
element.on('keydown', function (keyEvent) {
|
|
257
259
|
if (keyEvent && keyEvent.key === 'Enter') {
|
|
258
|
-
|
|
259
|
-
menuItem.clickFunction();
|
|
260
|
+
self_2.triggerFunctionAndEvent(menuItem, event, element.node());
|
|
260
261
|
}
|
|
261
262
|
else if (keyEvent && keyEvent.key === 'ArrowUp') {
|
|
262
263
|
// focus on previous menu item
|
|
@@ -283,35 +284,75 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
283
284
|
event.stopImmediatePropagation();
|
|
284
285
|
}
|
|
285
286
|
};
|
|
287
|
+
// Calls passed function && dispatches event
|
|
288
|
+
Toolbar.prototype.triggerFunctionAndEvent = function (control, event, element) {
|
|
289
|
+
// Call custom function only if it exists
|
|
290
|
+
if (typeof control.clickFunction === 'function') {
|
|
291
|
+
control.clickFunction(event);
|
|
292
|
+
}
|
|
293
|
+
// Dispatch selection event
|
|
294
|
+
this.services.events.dispatchEvent(Events.Toolbar.BUTTON_CLICK, {
|
|
295
|
+
control: control,
|
|
296
|
+
event: event,
|
|
297
|
+
element: element,
|
|
298
|
+
});
|
|
299
|
+
};
|
|
286
300
|
Toolbar.prototype.getControlConfigs = function () {
|
|
287
301
|
var _this = this;
|
|
288
|
-
var numberOfIcons = Tools.getProperty(this.getOptions(), 'toolbar', 'numberOfIcons')
|
|
302
|
+
var numberOfIcons = Tools.getProperty(this.getOptions(), 'toolbar', 'numberOfIcons') -
|
|
303
|
+
1;
|
|
289
304
|
var controls = Tools.getProperty(this.getOptions(), 'toolbar', 'controls');
|
|
290
|
-
var controlList = [];
|
|
291
305
|
var overflowSpecificControls = [];
|
|
306
|
+
var buttonList = [];
|
|
307
|
+
var overflowList = [];
|
|
292
308
|
controls.forEach(function (control) {
|
|
293
|
-
var controlConfig =
|
|
309
|
+
var controlConfig = null;
|
|
310
|
+
// check if button is custom or default control
|
|
311
|
+
if (control.type === ToolbarControlTypes.CUSTOM) {
|
|
312
|
+
// add generic id if missing
|
|
313
|
+
if (Tools.getProperty(control, 'id') === null) {
|
|
314
|
+
// add id directly to the data passed so that id isn't reassigned on rerender
|
|
315
|
+
control.id = "toolbar-button-" + Toolbar.buttonID++;
|
|
316
|
+
}
|
|
317
|
+
// define function if missing
|
|
318
|
+
if (Tools.getProperty(control, 'shouldBeDisabled') === null) {
|
|
319
|
+
control.shouldBeDisabled = function () { return false; };
|
|
320
|
+
}
|
|
321
|
+
controlConfig = control;
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
controlConfig = _this.getControlConfigByType(control.type);
|
|
325
|
+
}
|
|
294
326
|
// add to list if config is valid
|
|
295
327
|
if (controlConfig) {
|
|
296
328
|
controlConfig.text = control.text ? control.text : control.type;
|
|
297
329
|
if (controlConfig.id.indexOf('toolbar-export') !== -1) {
|
|
298
330
|
overflowSpecificControls.push(controlConfig);
|
|
299
331
|
}
|
|
332
|
+
else if (buttonList.length < numberOfIcons) {
|
|
333
|
+
// check if icon exists else assign to the overflow list
|
|
334
|
+
if (Tools.getProperty(controlConfig, 'iconSVG', 'content') === null) {
|
|
335
|
+
overflowList.push(controlConfig);
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
buttonList.push(controlConfig);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
300
341
|
else {
|
|
301
|
-
|
|
342
|
+
overflowList.push(controlConfig);
|
|
302
343
|
}
|
|
303
344
|
}
|
|
304
345
|
});
|
|
305
|
-
|
|
306
|
-
|
|
346
|
+
// Ensures the `export` controls are always at the bottom
|
|
347
|
+
overflowList.push.apply(overflowList, overflowSpecificControls);
|
|
348
|
+
if (!overflowList.length) {
|
|
307
349
|
return {
|
|
308
|
-
buttonList:
|
|
350
|
+
buttonList: buttonList,
|
|
309
351
|
};
|
|
310
352
|
}
|
|
311
353
|
return {
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
overflowMenuItemList: controlList.concat(overflowSpecificControls),
|
|
354
|
+
buttonList: buttonList,
|
|
355
|
+
overflowMenuItemList: overflowList,
|
|
315
356
|
};
|
|
316
357
|
};
|
|
317
358
|
Toolbar.prototype.getToolbarButtonItems = function () {
|
|
@@ -340,7 +381,9 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
340
381
|
id: 'toolbar-overflow-menu',
|
|
341
382
|
title: 'More options',
|
|
342
383
|
shouldBeDisabled: function () { return false; },
|
|
343
|
-
|
|
384
|
+
iconSVG: {
|
|
385
|
+
content: "<circle cx=\"16\" cy=\"8\" r=\"2\"></circle>\n\t\t\t\t<circle cx=\"16\" cy=\"16\" r=\"2\"></circle>\n\t\t\t\t<circle cx=\"16\" cy=\"24\" r=\"2\"></circle>",
|
|
386
|
+
},
|
|
344
387
|
clickFunction: function (event) { return _this.toggleOverflowMenu(event); },
|
|
345
388
|
};
|
|
346
389
|
};
|
|
@@ -360,7 +403,9 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
360
403
|
shouldBeDisabled: function () {
|
|
361
404
|
return _this.services.zoom.isMinZoomDomain();
|
|
362
405
|
},
|
|
363
|
-
|
|
406
|
+
iconSVG: {
|
|
407
|
+
content: this.getControlIconByType(controlType),
|
|
408
|
+
},
|
|
364
409
|
clickFunction: function () { return _this.services.zoom.zoomIn(); },
|
|
365
410
|
};
|
|
366
411
|
}
|
|
@@ -373,7 +418,9 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
373
418
|
shouldBeDisabled: function () {
|
|
374
419
|
return _this.services.zoom.isMaxZoomDomain();
|
|
375
420
|
},
|
|
376
|
-
|
|
421
|
+
iconSVG: {
|
|
422
|
+
content: this.getControlIconByType(controlType),
|
|
423
|
+
},
|
|
377
424
|
clickFunction: function () { return _this.services.zoom.zoomOut(); },
|
|
378
425
|
};
|
|
379
426
|
}
|
|
@@ -386,7 +433,9 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
386
433
|
shouldBeDisabled: function () {
|
|
387
434
|
return _this.services.zoom.isMaxZoomDomain();
|
|
388
435
|
},
|
|
389
|
-
|
|
436
|
+
iconSVG: {
|
|
437
|
+
content: this.getControlIconByType(controlType),
|
|
438
|
+
},
|
|
390
439
|
clickFunction: function () {
|
|
391
440
|
return _this.services.zoom.resetZoomDomain();
|
|
392
441
|
},
|
|
@@ -396,10 +445,12 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
396
445
|
case ToolbarControlTypes.MAKE_FULLSCREEN:
|
|
397
446
|
controlConfig = {
|
|
398
447
|
id: 'toolbar-makefullscreen',
|
|
448
|
+
iconSVG: {
|
|
449
|
+
content: this.getControlIconByType(controlType),
|
|
450
|
+
width: '15px',
|
|
451
|
+
height: '15px',
|
|
452
|
+
},
|
|
399
453
|
title: 'Make fullscreen',
|
|
400
|
-
iconSVGContent: this.getControlIconByType(controlType),
|
|
401
|
-
iconWidth: '15px',
|
|
402
|
-
iconHight: '15px',
|
|
403
454
|
shouldBeDisabled: function () { return false; },
|
|
404
455
|
clickFunction: function () {
|
|
405
456
|
_this.services.domUtils.toggleFullscreen();
|
|
@@ -409,8 +460,10 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
409
460
|
case ToolbarControlTypes.SHOW_AS_DATATABLE:
|
|
410
461
|
controlConfig = {
|
|
411
462
|
id: 'toolbar-showasdatatable',
|
|
463
|
+
iconSVG: {
|
|
464
|
+
content: this.getControlIconByType(controlType),
|
|
465
|
+
},
|
|
412
466
|
title: 'Show as table',
|
|
413
|
-
iconSVGContent: this.getControlIconByType(controlType),
|
|
414
467
|
shouldBeDisabled: function () { return displayData.length === 0; },
|
|
415
468
|
clickFunction: function () {
|
|
416
469
|
return _this.services.events.dispatchEvent(Events.Modal.SHOW);
|
|
@@ -422,7 +475,9 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
422
475
|
id: 'toolbar-export-CSV',
|
|
423
476
|
title: 'Export as CSV',
|
|
424
477
|
shouldBeDisabled: function () { return false; },
|
|
425
|
-
|
|
478
|
+
iconSVG: {
|
|
479
|
+
content: this.getControlIconByType(controlType),
|
|
480
|
+
},
|
|
426
481
|
clickFunction: function () { return _this.model.exportToCSV(); },
|
|
427
482
|
};
|
|
428
483
|
break;
|
|
@@ -431,7 +486,9 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
431
486
|
id: 'toolbar-export-PNG',
|
|
432
487
|
title: 'Export as PNG',
|
|
433
488
|
shouldBeDisabled: function () { return false; },
|
|
434
|
-
|
|
489
|
+
iconSVG: {
|
|
490
|
+
content: this.getControlIconByType(controlType),
|
|
491
|
+
},
|
|
435
492
|
clickFunction: function () { return _this.services.domUtils.exportToPNG(); },
|
|
436
493
|
};
|
|
437
494
|
break;
|
|
@@ -440,7 +497,9 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
440
497
|
id: 'toolbar-export-JPG',
|
|
441
498
|
title: 'Export as JPG',
|
|
442
499
|
shouldBeDisabled: function () { return false; },
|
|
443
|
-
|
|
500
|
+
iconSVG: {
|
|
501
|
+
content: this.getControlIconByType(controlType),
|
|
502
|
+
},
|
|
444
503
|
clickFunction: function () { return _this.services.domUtils.exportToJPG(); },
|
|
445
504
|
};
|
|
446
505
|
break;
|
|
@@ -473,6 +532,7 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
473
532
|
throw Error('Not supported toolbar control type: ' + controlType);
|
|
474
533
|
}
|
|
475
534
|
};
|
|
535
|
+
Toolbar.buttonID = 0;
|
|
476
536
|
return Toolbar;
|
|
477
537
|
}(Component));
|
|
478
538
|
export { Toolbar };
|