@carbon/charts 0.53.2 → 0.54.0
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 +100 -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/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 +182 -59
|
@@ -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;
|
|
@@ -47,6 +47,9 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
47
47
|
var isDataLoading = Tools.getProperty(this.getOptions(), 'data', 'loading');
|
|
48
48
|
if (isDataLoading) {
|
|
49
49
|
container.html('');
|
|
50
|
+
// Set overflow menu to null if data is loading
|
|
51
|
+
// This will render in a new overflow menu when data is done loading
|
|
52
|
+
this.overflowMenu = null;
|
|
50
53
|
}
|
|
51
54
|
else {
|
|
52
55
|
if (!this.overflowMenu) {
|
|
@@ -75,23 +78,26 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
75
78
|
var self_1 = this;
|
|
76
79
|
var allToolbarControls = enteringToolbarControls
|
|
77
80
|
.merge(toolbarControls)
|
|
78
|
-
.classed('disabled', function (d) {
|
|
79
|
-
|
|
80
|
-
})
|
|
81
|
-
.attr('aria-disabled', function (d) {
|
|
82
|
-
return d.shouldBeDisabled ? d.shouldBeDisabled() : false;
|
|
83
|
-
})
|
|
81
|
+
.classed('disabled', function (d) { return d.shouldBeDisabled(); })
|
|
82
|
+
.attr('aria-disabled', function (d) { return d.shouldBeDisabled(); })
|
|
84
83
|
.attr('aria-label', function (d) { return d.title; })
|
|
85
|
-
.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>"; })
|
|
86
87
|
.each(function (d, index) {
|
|
88
|
+
var _this = this;
|
|
87
89
|
select(this)
|
|
88
90
|
.select('button')
|
|
89
|
-
.on('click',
|
|
91
|
+
.on('click', function (event) {
|
|
92
|
+
if (!d.shouldBeDisabled()) {
|
|
93
|
+
self_1.triggerFunctionAndEvent(d, event, _this);
|
|
94
|
+
}
|
|
95
|
+
})
|
|
90
96
|
.on('keydown', function (event) {
|
|
91
97
|
if ((event.key && event.key === 'Enter') ||
|
|
92
98
|
event.key === ' ') {
|
|
93
99
|
event.preventDefault();
|
|
94
|
-
|
|
100
|
+
self_1.triggerFunctionAndEvent(d, event, _this);
|
|
95
101
|
}
|
|
96
102
|
else if (event.key && event.key === 'ArrowLeft') {
|
|
97
103
|
self_1.focusOnPreviousEnabledToolbarItem(index);
|
|
@@ -140,6 +146,9 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
140
146
|
};
|
|
141
147
|
// show/hide overflow menu
|
|
142
148
|
Toolbar.prototype.updateOverflowMenu = function (show) {
|
|
149
|
+
if (!this.overflowMenu) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
143
152
|
this.overflowMenu.classed('is-open', show);
|
|
144
153
|
// update overflow button background
|
|
145
154
|
if (this.overflowButton) {
|
|
@@ -242,15 +251,13 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
242
251
|
var element = select("#" + _this.services.domUtils.generateElementIDString("control-" + menuItem.id));
|
|
243
252
|
if (element !== null) {
|
|
244
253
|
element.on('click', function () {
|
|
245
|
-
|
|
246
|
-
menuItem.clickFunction();
|
|
254
|
+
self_2.triggerFunctionAndEvent(menuItem, event, element.node());
|
|
247
255
|
// hide overflow menu
|
|
248
256
|
self_2.updateOverflowMenu(false);
|
|
249
257
|
});
|
|
250
258
|
element.on('keydown', function (keyEvent) {
|
|
251
259
|
if (keyEvent && keyEvent.key === 'Enter') {
|
|
252
|
-
|
|
253
|
-
menuItem.clickFunction();
|
|
260
|
+
self_2.triggerFunctionAndEvent(menuItem, event, element.node());
|
|
254
261
|
}
|
|
255
262
|
else if (keyEvent && keyEvent.key === 'ArrowUp') {
|
|
256
263
|
// focus on previous menu item
|
|
@@ -277,35 +284,75 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
277
284
|
event.stopImmediatePropagation();
|
|
278
285
|
}
|
|
279
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
|
+
};
|
|
280
300
|
Toolbar.prototype.getControlConfigs = function () {
|
|
281
301
|
var _this = this;
|
|
282
|
-
var numberOfIcons = Tools.getProperty(this.getOptions(), 'toolbar', 'numberOfIcons')
|
|
302
|
+
var numberOfIcons = Tools.getProperty(this.getOptions(), 'toolbar', 'numberOfIcons') -
|
|
303
|
+
1;
|
|
283
304
|
var controls = Tools.getProperty(this.getOptions(), 'toolbar', 'controls');
|
|
284
|
-
var controlList = [];
|
|
285
305
|
var overflowSpecificControls = [];
|
|
306
|
+
var buttonList = [];
|
|
307
|
+
var overflowList = [];
|
|
286
308
|
controls.forEach(function (control) {
|
|
287
|
-
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
|
+
}
|
|
288
326
|
// add to list if config is valid
|
|
289
327
|
if (controlConfig) {
|
|
290
328
|
controlConfig.text = control.text ? control.text : control.type;
|
|
291
329
|
if (controlConfig.id.indexOf('toolbar-export') !== -1) {
|
|
292
330
|
overflowSpecificControls.push(controlConfig);
|
|
293
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
|
+
}
|
|
294
341
|
else {
|
|
295
|
-
|
|
342
|
+
overflowList.push(controlConfig);
|
|
296
343
|
}
|
|
297
344
|
}
|
|
298
345
|
});
|
|
299
|
-
|
|
300
|
-
|
|
346
|
+
// Ensures the `export` controls are always at the bottom
|
|
347
|
+
overflowList.push.apply(overflowList, overflowSpecificControls);
|
|
348
|
+
if (!overflowList.length) {
|
|
301
349
|
return {
|
|
302
|
-
buttonList:
|
|
350
|
+
buttonList: buttonList,
|
|
303
351
|
};
|
|
304
352
|
}
|
|
305
353
|
return {
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
overflowMenuItemList: controlList.concat(overflowSpecificControls),
|
|
354
|
+
buttonList: buttonList,
|
|
355
|
+
overflowMenuItemList: overflowList,
|
|
309
356
|
};
|
|
310
357
|
};
|
|
311
358
|
Toolbar.prototype.getToolbarButtonItems = function () {
|
|
@@ -334,7 +381,9 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
334
381
|
id: 'toolbar-overflow-menu',
|
|
335
382
|
title: 'More options',
|
|
336
383
|
shouldBeDisabled: function () { return false; },
|
|
337
|
-
|
|
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
|
+
},
|
|
338
387
|
clickFunction: function (event) { return _this.toggleOverflowMenu(event); },
|
|
339
388
|
};
|
|
340
389
|
};
|
|
@@ -354,7 +403,9 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
354
403
|
shouldBeDisabled: function () {
|
|
355
404
|
return _this.services.zoom.isMinZoomDomain();
|
|
356
405
|
},
|
|
357
|
-
|
|
406
|
+
iconSVG: {
|
|
407
|
+
content: this.getControlIconByType(controlType),
|
|
408
|
+
},
|
|
358
409
|
clickFunction: function () { return _this.services.zoom.zoomIn(); },
|
|
359
410
|
};
|
|
360
411
|
}
|
|
@@ -367,7 +418,9 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
367
418
|
shouldBeDisabled: function () {
|
|
368
419
|
return _this.services.zoom.isMaxZoomDomain();
|
|
369
420
|
},
|
|
370
|
-
|
|
421
|
+
iconSVG: {
|
|
422
|
+
content: this.getControlIconByType(controlType),
|
|
423
|
+
},
|
|
371
424
|
clickFunction: function () { return _this.services.zoom.zoomOut(); },
|
|
372
425
|
};
|
|
373
426
|
}
|
|
@@ -380,7 +433,9 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
380
433
|
shouldBeDisabled: function () {
|
|
381
434
|
return _this.services.zoom.isMaxZoomDomain();
|
|
382
435
|
},
|
|
383
|
-
|
|
436
|
+
iconSVG: {
|
|
437
|
+
content: this.getControlIconByType(controlType),
|
|
438
|
+
},
|
|
384
439
|
clickFunction: function () {
|
|
385
440
|
return _this.services.zoom.resetZoomDomain();
|
|
386
441
|
},
|
|
@@ -390,10 +445,12 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
390
445
|
case ToolbarControlTypes.MAKE_FULLSCREEN:
|
|
391
446
|
controlConfig = {
|
|
392
447
|
id: 'toolbar-makefullscreen',
|
|
448
|
+
iconSVG: {
|
|
449
|
+
content: this.getControlIconByType(controlType),
|
|
450
|
+
width: '15px',
|
|
451
|
+
height: '15px',
|
|
452
|
+
},
|
|
393
453
|
title: 'Make fullscreen',
|
|
394
|
-
iconSVGContent: this.getControlIconByType(controlType),
|
|
395
|
-
iconWidth: '15px',
|
|
396
|
-
iconHight: '15px',
|
|
397
454
|
shouldBeDisabled: function () { return false; },
|
|
398
455
|
clickFunction: function () {
|
|
399
456
|
_this.services.domUtils.toggleFullscreen();
|
|
@@ -403,8 +460,10 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
403
460
|
case ToolbarControlTypes.SHOW_AS_DATATABLE:
|
|
404
461
|
controlConfig = {
|
|
405
462
|
id: 'toolbar-showasdatatable',
|
|
463
|
+
iconSVG: {
|
|
464
|
+
content: this.getControlIconByType(controlType),
|
|
465
|
+
},
|
|
406
466
|
title: 'Show as table',
|
|
407
|
-
iconSVGContent: this.getControlIconByType(controlType),
|
|
408
467
|
shouldBeDisabled: function () { return displayData.length === 0; },
|
|
409
468
|
clickFunction: function () {
|
|
410
469
|
return _this.services.events.dispatchEvent(Events.Modal.SHOW);
|
|
@@ -416,7 +475,9 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
416
475
|
id: 'toolbar-export-CSV',
|
|
417
476
|
title: 'Export as CSV',
|
|
418
477
|
shouldBeDisabled: function () { return false; },
|
|
419
|
-
|
|
478
|
+
iconSVG: {
|
|
479
|
+
content: this.getControlIconByType(controlType),
|
|
480
|
+
},
|
|
420
481
|
clickFunction: function () { return _this.model.exportToCSV(); },
|
|
421
482
|
};
|
|
422
483
|
break;
|
|
@@ -425,7 +486,9 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
425
486
|
id: 'toolbar-export-PNG',
|
|
426
487
|
title: 'Export as PNG',
|
|
427
488
|
shouldBeDisabled: function () { return false; },
|
|
428
|
-
|
|
489
|
+
iconSVG: {
|
|
490
|
+
content: this.getControlIconByType(controlType),
|
|
491
|
+
},
|
|
429
492
|
clickFunction: function () { return _this.services.domUtils.exportToPNG(); },
|
|
430
493
|
};
|
|
431
494
|
break;
|
|
@@ -434,7 +497,9 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
434
497
|
id: 'toolbar-export-JPG',
|
|
435
498
|
title: 'Export as JPG',
|
|
436
499
|
shouldBeDisabled: function () { return false; },
|
|
437
|
-
|
|
500
|
+
iconSVG: {
|
|
501
|
+
content: this.getControlIconByType(controlType),
|
|
502
|
+
},
|
|
438
503
|
clickFunction: function () { return _this.services.domUtils.exportToJPG(); },
|
|
439
504
|
};
|
|
440
505
|
break;
|
|
@@ -467,6 +532,7 @@ var Toolbar = /** @class */ (function (_super) {
|
|
|
467
532
|
throw Error('Not supported toolbar control type: ' + controlType);
|
|
468
533
|
}
|
|
469
534
|
};
|
|
535
|
+
Toolbar.buttonID = 0;
|
|
470
536
|
return Toolbar;
|
|
471
537
|
}(Component));
|
|
472
538
|
export { Toolbar };
|