@carbon/charts 0.34.5 → 0.34.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -5
- package/axis-chart.d.ts +2 -2
- package/axis-chart.js +27 -4
- package/axis-chart.js.map +1 -1
- package/build/demo/data/bar.d.ts +23 -0
- package/build/demo/data/zoom-bar.d.ts +74 -0
- package/build/src/axis-chart.d.ts +2 -2
- package/build/src/components/axes/axis.d.ts +4 -0
- package/build/src/components/axes/chart-clip.d.ts +11 -0
- package/build/src/components/axes/grid-brush.d.ts +8 -0
- package/build/src/components/axes/zoom-bar.d.ts +20 -0
- package/build/src/components/component.d.ts +3 -1
- package/build/src/components/graphs/bar.d.ts +1 -0
- package/build/src/components/graphs/scatter.d.ts +1 -0
- package/build/src/components/index.d.ts +3 -0
- package/build/src/configuration.d.ts +4 -0
- package/build/src/interfaces/charts.d.ts +5 -1
- package/build/src/interfaces/components.d.ts +26 -0
- package/build/src/interfaces/events.d.ts +9 -0
- package/build/src/model.d.ts +2 -2
- package/build/src/services/index.d.ts +1 -0
- package/build/src/services/scales-cartesian.d.ts +7 -4
- package/build/src/services/zoom.d.ts +5 -0
- package/bundle.js +1 -1
- package/chart.js +5 -4
- package/chart.js.map +1 -1
- package/charts/area-stacked.js.map +1 -1
- package/charts/area.js.map +1 -1
- package/charts/bar-grouped.js.map +1 -1
- package/charts/bar-simple.js.map +1 -1
- package/charts/bar-stacked.js.map +1 -1
- package/charts/bubble.js.map +1 -1
- package/charts/donut.js.map +1 -1
- package/charts/line.js.map +1 -1
- package/charts/meter.js +7 -15
- package/charts/meter.js.map +1 -1
- package/charts/pie.js.map +1 -1
- package/charts/radar.js +3 -1
- package/charts/radar.js.map +1 -1
- package/charts/scatter.js.map +1 -1
- package/components/axes/axis.d.ts +4 -0
- package/components/axes/axis.js +41 -5
- package/components/axes/axis.js.map +1 -1
- package/components/axes/chart-clip.d.ts +11 -0
- package/components/axes/chart-clip.js +59 -0
- package/components/axes/chart-clip.js.map +1 -0
- package/components/axes/grid-brush.d.ts +8 -0
- package/components/axes/grid-brush.js +163 -0
- package/components/axes/grid-brush.js.map +1 -0
- package/components/axes/two-dimensional-axes.js +4 -0
- package/components/axes/two-dimensional-axes.js.map +1 -1
- package/components/axes/zoom-bar.d.ts +20 -0
- package/components/axes/zoom-bar.js +318 -0
- package/components/axes/zoom-bar.js.map +1 -0
- package/components/component.d.ts +3 -1
- package/components/component.js +11 -2
- package/components/component.js.map +1 -1
- package/components/essentials/legend.js.map +1 -1
- package/components/essentials/title-meter.js +28 -17
- package/components/essentials/title-meter.js.map +1 -1
- package/components/essentials/title.js +2 -1
- package/components/essentials/title.js.map +1 -1
- package/components/essentials/tooltip-axis.js +4 -1
- package/components/essentials/tooltip-axis.js.map +1 -1
- package/components/essentials/tooltip.js +12 -0
- package/components/essentials/tooltip.js.map +1 -1
- package/components/graphs/area-stacked.js +1 -1
- package/components/graphs/area-stacked.js.map +1 -1
- package/components/graphs/area.js +1 -1
- package/components/graphs/area.js.map +1 -1
- package/components/graphs/bar-grouped.js +5 -1
- package/components/graphs/bar-grouped.js.map +1 -1
- package/components/graphs/bar-simple.js +5 -1
- package/components/graphs/bar-simple.js.map +1 -1
- package/components/graphs/bar-stacked.js +5 -1
- package/components/graphs/bar-stacked.js.map +1 -1
- package/components/graphs/bar.d.ts +1 -0
- package/components/graphs/bar.js +21 -1
- package/components/graphs/bar.js.map +1 -1
- package/components/graphs/line.js +1 -1
- package/components/graphs/line.js.map +1 -1
- package/components/graphs/meter.js +13 -12
- package/components/graphs/meter.js.map +1 -1
- package/components/graphs/pie.js +6 -2
- package/components/graphs/pie.js.map +1 -1
- package/components/graphs/radar.js.map +1 -1
- package/components/graphs/scatter-stacked.js +1 -1
- package/components/graphs/scatter-stacked.js.map +1 -1
- package/components/graphs/scatter.d.ts +1 -0
- package/components/graphs/scatter.js +14 -1
- package/components/graphs/scatter.js.map +1 -1
- package/components/index.d.ts +3 -0
- package/components/index.js +3 -0
- package/components/index.js.map +1 -1
- package/configuration.d.ts +4 -0
- package/configuration.js +10 -1
- package/configuration.js.map +1 -1
- package/demo/data/bar.d.ts +23 -0
- package/demo/data/bar.js +34 -0
- package/demo/data/bar.js.map +1 -1
- package/demo/data/bundle.js +1 -1
- package/demo/data/donut.js.map +1 -1
- package/demo/data/index.js +78 -0
- package/demo/data/index.js.map +1 -1
- package/demo/data/line.js.map +1 -1
- package/demo/data/meter.js.map +1 -1
- package/demo/data/pie.js.map +1 -1
- package/demo/data/radar.js.map +1 -1
- package/demo/data/time-series-axis.js +6 -6
- package/demo/data/time-series-axis.js.map +1 -1
- package/demo/data/zoom-bar.d.ts +74 -0
- package/demo/data/zoom-bar.js +77 -0
- package/demo/data/zoom-bar.js.map +1 -0
- package/demo/styles.css +352 -4
- 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 +39 -19
- package/interfaces/axis-scales.js.map +1 -1
- package/interfaces/charts.d.ts +5 -1
- package/interfaces/charts.js.map +1 -1
- package/interfaces/components.d.ts +26 -0
- package/interfaces/components.js.map +1 -1
- package/interfaces/events.d.ts +9 -0
- package/interfaces/events.js +10 -0
- package/interfaces/events.js.map +1 -1
- package/model-meter.js +3 -1
- package/model-meter.js.map +1 -1
- package/model.d.ts +2 -2
- package/model.js +10 -8
- package/model.js.map +1 -1
- package/package.json +1 -1
- package/services/essentials/dom-utils.js +9 -4
- package/services/essentials/dom-utils.js.map +1 -1
- package/services/index.d.ts +1 -0
- package/services/index.js +1 -0
- package/services/index.js.map +1 -1
- package/services/scales-cartesian.d.ts +7 -4
- package/services/scales-cartesian.js +27 -12
- package/services/scales-cartesian.js.map +1 -1
- package/services/zoom.d.ts +5 -0
- package/services/zoom.js +73 -0
- package/services/zoom.js.map +1 -0
- package/styles/components/_grid-brush.scss +18 -0
- package/styles/components/_meter-title.scss +5 -1
- package/styles/components/_zoom-bar.scss +38 -0
- package/styles/components/index.scss +2 -0
- package/styles/graphs/_meter.scss +5 -1
- package/styles/styles.scss +1 -1
- package/styles-g10.css +41 -1
- 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 +41 -1
- 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 +41 -1
- 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 +41 -1
- package/styles.css.map +1 -1
- package/styles.min.css +1 -1
- package/styles.min.css.map +1 -1
- package/tsconfig.tsbuildinfo +159 -66
|
@@ -0,0 +1,318 @@
|
|
|
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 { Component } from "../component";
|
|
16
|
+
import { Tools } from "../../tools";
|
|
17
|
+
import { Events, ScaleTypes } from "../../interfaces";
|
|
18
|
+
import { DOMUtils } from "../../services";
|
|
19
|
+
import * as Configuration from "../../configuration";
|
|
20
|
+
// D3 Imports
|
|
21
|
+
import { extent } from "d3-array";
|
|
22
|
+
import { brushX } from "d3-brush";
|
|
23
|
+
import { area, line } from "d3-shape";
|
|
24
|
+
import { event } from "d3-selection";
|
|
25
|
+
var ZoomBar = /** @class */ (function (_super) {
|
|
26
|
+
__extends(ZoomBar, _super);
|
|
27
|
+
function ZoomBar() {
|
|
28
|
+
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
29
|
+
_this.type = "zoom-bar";
|
|
30
|
+
// The minimum selection x range to trigger handler update
|
|
31
|
+
// Smaller number may introduce a handler flash during initialization
|
|
32
|
+
// Bigger number may not trigger handler update while selection area on chart is very small
|
|
33
|
+
_this.MIN_SELECTION_DIFF = 9e-10;
|
|
34
|
+
// needs to match the style in _zoom-bar.scss
|
|
35
|
+
_this.brushSelector = "g.zoom-bar-brush";
|
|
36
|
+
// Give every zoomBarClip a distinct ID
|
|
37
|
+
// so they don't interfere the other zoom bars in a page
|
|
38
|
+
_this.clipId = "zoomBarClip-" + Math.floor(Math.random() * 99999999999);
|
|
39
|
+
_this.brush = brushX();
|
|
40
|
+
return _this;
|
|
41
|
+
}
|
|
42
|
+
ZoomBar.prototype.init = function () {
|
|
43
|
+
this.services.events.addEventListener(Events.ZoomBar.UPDATE, this.render.bind(this));
|
|
44
|
+
// get initZoomDomain
|
|
45
|
+
var initialZoomDomain = Tools.getProperty(this.model.getOptions(), "zoomBar", "top", "initialZoomDomain");
|
|
46
|
+
if (initialZoomDomain !== null) {
|
|
47
|
+
this.model.set({ zoomDomain: initialZoomDomain }, { skipUpdate: true });
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
ZoomBar.prototype.render = function (animate) {
|
|
51
|
+
var _this = this;
|
|
52
|
+
if (animate === void 0) { animate = true; }
|
|
53
|
+
var svg = this.getContainerSVG();
|
|
54
|
+
var isDataLoading = Tools.getProperty(this.model.getOptions(), "data", "loading");
|
|
55
|
+
var width = DOMUtils.getSVGElementSize(this.parent, {
|
|
56
|
+
useAttrs: true
|
|
57
|
+
}).width;
|
|
58
|
+
// get axes margins
|
|
59
|
+
var axesLeftMargin = 0;
|
|
60
|
+
var axesMargins = this.model.get("axesMargins");
|
|
61
|
+
if (axesMargins && axesMargins.left) {
|
|
62
|
+
axesLeftMargin = axesMargins.left;
|
|
63
|
+
}
|
|
64
|
+
var container = DOMUtils.appendOrSelect(svg, "svg.zoom-container")
|
|
65
|
+
.attr("width", "100%")
|
|
66
|
+
.attr("height", Configuration.zoomBar.height)
|
|
67
|
+
.attr("opacity", 1);
|
|
68
|
+
var spacer = DOMUtils.appendOrSelect(svg, "rect.zoom-spacer")
|
|
69
|
+
.attr("x", 0)
|
|
70
|
+
.attr("y", Configuration.zoomBar.height)
|
|
71
|
+
.attr("width", "100%")
|
|
72
|
+
.attr("height", Configuration.zoomBar.spacerHeight)
|
|
73
|
+
.attr("opacity", 1)
|
|
74
|
+
.attr("fill", "none");
|
|
75
|
+
var zoomBG = DOMUtils.appendOrSelect(container, "rect.zoom-bg")
|
|
76
|
+
.attr("x", axesLeftMargin)
|
|
77
|
+
.attr("y", 0)
|
|
78
|
+
.attr("width", width - axesLeftMargin)
|
|
79
|
+
.attr("height", "100%");
|
|
80
|
+
if (isDataLoading) {
|
|
81
|
+
// TODO - zoom bar skeleton could be improved in the future
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
var cartesianScales = this.services.cartesianScales;
|
|
85
|
+
var mainXScale = cartesianScales.getMainXScale();
|
|
86
|
+
var mainYScale = cartesianScales.getMainYScale();
|
|
87
|
+
var mainXScaleType = cartesianScales.getMainXScaleType();
|
|
88
|
+
if (mainXScale && mainXScaleType === ScaleTypes.TIME) {
|
|
89
|
+
var zoomBarData = this.services.zoom.getZoomBarData();
|
|
90
|
+
this.xScale = mainXScale.copy();
|
|
91
|
+
this.yScale = mainYScale.copy();
|
|
92
|
+
var defaultDomain = this.services.zoom.getDefaultZoomBarDomain();
|
|
93
|
+
// add value 0 to the extended domain for zoom bar area graph
|
|
94
|
+
this.compensateDataForDefaultDomain(zoomBarData, defaultDomain);
|
|
95
|
+
this.xScale.range([axesLeftMargin, width]).domain(defaultDomain);
|
|
96
|
+
// keep max selection range
|
|
97
|
+
this.maxSelectionRange = this.xScale.range();
|
|
98
|
+
this.yScale
|
|
99
|
+
.range([0, Configuration.zoomBar.height - 6])
|
|
100
|
+
.domain(extent(zoomBarData, function (d) { return d.value; }));
|
|
101
|
+
var zoomDomain = this.model.get("zoomDomain");
|
|
102
|
+
this.renderZoomBarArea(container, "path.zoom-graph-area-unselected", zoomBarData, null);
|
|
103
|
+
this.updateClipPath(svg, this.clipId, 0, 0, 0, 0);
|
|
104
|
+
this.renderZoomBarArea(container, "path.zoom-graph-area", zoomBarData, this.clipId);
|
|
105
|
+
// Draw the zoom base line
|
|
106
|
+
var baselineGenerator = line()([
|
|
107
|
+
[axesLeftMargin, Configuration.zoomBar.height],
|
|
108
|
+
[width, Configuration.zoomBar.height]
|
|
109
|
+
]);
|
|
110
|
+
var zoomBaseline = DOMUtils.appendOrSelect(container, "path.zoom-bg-baseline").attr("d", baselineGenerator);
|
|
111
|
+
// Attach brushing event listeners
|
|
112
|
+
this.addBrushEventListener(zoomDomain, axesLeftMargin, width);
|
|
113
|
+
// Draw the brushing area
|
|
114
|
+
var brushArea = DOMUtils.appendOrSelect(svg, this.brushSelector).call(this.brush);
|
|
115
|
+
if (zoomDomain === undefined) {
|
|
116
|
+
// do nothing, initialization not completed yet
|
|
117
|
+
// don't update brushHandle to avoid flash
|
|
118
|
+
}
|
|
119
|
+
else if (zoomDomain[0].valueOf() === zoomDomain[1].valueOf()) {
|
|
120
|
+
brushArea.call(this.brush.move, this.xScale.range()); // default to full range
|
|
121
|
+
this.updateBrushHandle(this.getContainerSVG(), this.xScale.range(), this.xScale.domain());
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
var selected = zoomDomain.map(function (domain) {
|
|
125
|
+
return _this.xScale(domain);
|
|
126
|
+
});
|
|
127
|
+
if (selected[1] - selected[0] < this.MIN_SELECTION_DIFF) {
|
|
128
|
+
// initialization not completed yet
|
|
129
|
+
// don't update brushHandle to avoid flash
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
brushArea.call(this.brush.move, selected); // set brush to correct position
|
|
133
|
+
this.updateBrushHandle(this.getContainerSVG(), selected, zoomDomain);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
ZoomBar.prototype.addBrushEventListener = function (zoomDomain, axesLeftMargin, width) {
|
|
139
|
+
var _this = this;
|
|
140
|
+
var brushEventListener = function () {
|
|
141
|
+
var selection = event.selection;
|
|
142
|
+
// follow d3 behavior: when selection is null, reset default full range
|
|
143
|
+
// select behavior is completed, but nothing selected
|
|
144
|
+
if (selection === null) {
|
|
145
|
+
_this.handleBrushedEvent(zoomDomain, _this.xScale, _this.xScale.range());
|
|
146
|
+
}
|
|
147
|
+
else if (selection[0] === selection[1]) {
|
|
148
|
+
// select behavior is not completed yet, do nothing
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
_this.handleBrushedEvent(zoomDomain, _this.xScale, selection);
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
// Initialize the d3 brush
|
|
155
|
+
this.brush
|
|
156
|
+
.extent([
|
|
157
|
+
[axesLeftMargin, 0],
|
|
158
|
+
[width, Configuration.zoomBar.height]
|
|
159
|
+
])
|
|
160
|
+
.on("start brush end", null) // remove old listener first
|
|
161
|
+
.on("start brush end", brushEventListener);
|
|
162
|
+
};
|
|
163
|
+
// brush event listener
|
|
164
|
+
ZoomBar.prototype.handleBrushedEvent = function (zoomDomain, scale, selection) {
|
|
165
|
+
var newDomain = [
|
|
166
|
+
scale.invert(selection[0]),
|
|
167
|
+
scale.invert(selection[1])
|
|
168
|
+
];
|
|
169
|
+
// update brush handle position
|
|
170
|
+
this.updateBrushHandle(this.getContainerSVG(), selection, newDomain);
|
|
171
|
+
// be aware that the value of d3.event changes during an event!
|
|
172
|
+
// update zoomDomain only if the event comes from mouse event
|
|
173
|
+
if (event.sourceEvent != null &&
|
|
174
|
+
(event.sourceEvent.type === "mousemove" ||
|
|
175
|
+
event.sourceEvent.type === "mouseup" ||
|
|
176
|
+
event.sourceEvent.type === "mousedown")) {
|
|
177
|
+
// only if zoomDomain is never set or needs update
|
|
178
|
+
if (zoomDomain === undefined ||
|
|
179
|
+
zoomDomain[0] !== newDomain[0] ||
|
|
180
|
+
zoomDomain[1] !== newDomain[1]) {
|
|
181
|
+
this.model.set({ zoomDomain: newDomain }, { animate: false });
|
|
182
|
+
}
|
|
183
|
+
// dispatch selection events
|
|
184
|
+
var zoomBarEventType = void 0;
|
|
185
|
+
if (event.type === "start") {
|
|
186
|
+
zoomBarEventType = Events.ZoomBar.SELECTION_START;
|
|
187
|
+
}
|
|
188
|
+
else if (event.type === "brush") {
|
|
189
|
+
zoomBarEventType = Events.ZoomBar.SELECTION_IN_PROGRESS;
|
|
190
|
+
}
|
|
191
|
+
else if (event.type === "end") {
|
|
192
|
+
zoomBarEventType = Events.ZoomBar.SELECTION_END;
|
|
193
|
+
}
|
|
194
|
+
this.services.events.dispatchEvent(zoomBarEventType, {
|
|
195
|
+
selection: selection,
|
|
196
|
+
newDomain: newDomain
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
ZoomBar.prototype.updateBrushHandle = function (svg, selection, domain) {
|
|
201
|
+
var self = this;
|
|
202
|
+
var handleWidth = 5;
|
|
203
|
+
var handleHeight = Configuration.zoomBar.height;
|
|
204
|
+
var handleXDiff = -handleWidth / 2;
|
|
205
|
+
var handleBarWidth = 1;
|
|
206
|
+
var handleBarHeight = 12;
|
|
207
|
+
var handleBarXDiff = -handleBarWidth / 2;
|
|
208
|
+
var handleYBarDiff = (handleHeight - handleBarHeight) / 2;
|
|
209
|
+
// handle
|
|
210
|
+
svg.select(this.brushSelector)
|
|
211
|
+
.selectAll("rect.handle")
|
|
212
|
+
.data([{ type: "w" }, { type: "e" }])
|
|
213
|
+
.attr("x", function (d) {
|
|
214
|
+
if (d.type === "w") {
|
|
215
|
+
// handle should not exceed zoom bar range
|
|
216
|
+
return Math.max(selection[0] + handleXDiff, self.maxSelectionRange[0]);
|
|
217
|
+
}
|
|
218
|
+
else if (d.type === "e") {
|
|
219
|
+
// handle should not exceed zoom bar range
|
|
220
|
+
return Math.min(selection[1] + handleXDiff, self.maxSelectionRange[1] - handleWidth);
|
|
221
|
+
}
|
|
222
|
+
})
|
|
223
|
+
.attr("y", 0)
|
|
224
|
+
.attr("width", handleWidth)
|
|
225
|
+
.attr("height", handleHeight)
|
|
226
|
+
.attr("cursor", "pointer")
|
|
227
|
+
.style("display", null); // always display
|
|
228
|
+
// handle-bar
|
|
229
|
+
var handleBars = svg
|
|
230
|
+
.select(this.brushSelector)
|
|
231
|
+
.selectAll("rect.handle-bar")
|
|
232
|
+
.data([{ type: "w" }, { type: "e" }]);
|
|
233
|
+
// create rect if not exists
|
|
234
|
+
handleBars
|
|
235
|
+
.enter()
|
|
236
|
+
.append("rect")
|
|
237
|
+
.attr("class", function (d) {
|
|
238
|
+
return "handle-bar handle-bar--" + d.type;
|
|
239
|
+
});
|
|
240
|
+
// update positions
|
|
241
|
+
handleBars
|
|
242
|
+
.attr("x", function (d) {
|
|
243
|
+
if (d.type === "w") {
|
|
244
|
+
return Math.max(selection[0] + handleBarXDiff, self.maxSelectionRange[0] - handleXDiff + handleBarXDiff);
|
|
245
|
+
}
|
|
246
|
+
else if (d.type === "e") {
|
|
247
|
+
return Math.min(selection[1] + handleBarXDiff, self.maxSelectionRange[1] + handleXDiff + handleBarXDiff);
|
|
248
|
+
}
|
|
249
|
+
})
|
|
250
|
+
.attr("y", handleYBarDiff)
|
|
251
|
+
.attr("width", handleBarWidth)
|
|
252
|
+
.attr("height", handleBarHeight)
|
|
253
|
+
.attr("cursor", "pointer");
|
|
254
|
+
this.updateClipPath(svg, this.clipId, selection[0], 0, selection[1] - selection[0], Configuration.zoomBar.height);
|
|
255
|
+
};
|
|
256
|
+
ZoomBar.prototype.renderZoomBarArea = function (container, querySelector, data, clipId) {
|
|
257
|
+
var cartesianScales = this.services.cartesianScales;
|
|
258
|
+
var mainXAxisPosition = cartesianScales.getMainXAxisPosition();
|
|
259
|
+
var mainYAxisPosition = cartesianScales.getMainYAxisPosition();
|
|
260
|
+
var mainXScaleType = cartesianScales.getMainXScaleType();
|
|
261
|
+
var mainYScaleType = cartesianScales.getMainYScaleType();
|
|
262
|
+
var accessorFunction = function (scale, scaleType, axisPosition) {
|
|
263
|
+
return function (d, i) {
|
|
264
|
+
return cartesianScales.getValueFromScale(scale, scaleType, axisPosition, d, i);
|
|
265
|
+
};
|
|
266
|
+
};
|
|
267
|
+
var xAccessor = accessorFunction(this.xScale, mainXScaleType, mainXAxisPosition);
|
|
268
|
+
var yAccessor = accessorFunction(this.yScale, mainYScaleType, mainYAxisPosition);
|
|
269
|
+
var areaGenerator = area()
|
|
270
|
+
.x(function (d, i) { return xAccessor(d, i); })
|
|
271
|
+
.y0(Configuration.zoomBar.height)
|
|
272
|
+
.y1(function (d, i) { return Configuration.zoomBar.height - yAccessor(d, i); });
|
|
273
|
+
var areaGraph = DOMUtils.appendOrSelect(container, querySelector)
|
|
274
|
+
.datum(data)
|
|
275
|
+
.attr("d", areaGenerator);
|
|
276
|
+
if (clipId) {
|
|
277
|
+
areaGraph.attr("clip-path", "url(#" + clipId + ")");
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
ZoomBar.prototype.updateClipPath = function (svg, clipId, x, y, width, height) {
|
|
281
|
+
var zoomBarClipPath = DOMUtils.appendOrSelect(svg, "clipPath").attr("id", clipId);
|
|
282
|
+
DOMUtils.appendOrSelect(zoomBarClipPath, "rect")
|
|
283
|
+
.attr("x", x)
|
|
284
|
+
.attr("y", y)
|
|
285
|
+
.attr("width", width)
|
|
286
|
+
.attr("height", height);
|
|
287
|
+
};
|
|
288
|
+
// assume the domains in data are already sorted
|
|
289
|
+
ZoomBar.prototype.compensateDataForDefaultDomain = function (data, defaultDomain) {
|
|
290
|
+
if (!data || data.length < 2) {
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
var domainIdentifier = this.services.cartesianScales.getDomainIdentifier();
|
|
294
|
+
var rangeIdentifier = this.services.cartesianScales.getRangeIdentifier();
|
|
295
|
+
// if min domain is extended
|
|
296
|
+
if (Number(defaultDomain[0]) < Number(data[0][domainIdentifier])) {
|
|
297
|
+
var newDatum = {};
|
|
298
|
+
newDatum[domainIdentifier] = defaultDomain[0];
|
|
299
|
+
newDatum[rangeIdentifier] = 0;
|
|
300
|
+
data.unshift(newDatum);
|
|
301
|
+
}
|
|
302
|
+
// if max domain is extended
|
|
303
|
+
if (Number(defaultDomain[1]) >
|
|
304
|
+
Number(data[data.length - 1][domainIdentifier])) {
|
|
305
|
+
var newDatum = {};
|
|
306
|
+
newDatum[domainIdentifier] = defaultDomain[1];
|
|
307
|
+
newDatum[rangeIdentifier] = 0;
|
|
308
|
+
data.push(newDatum);
|
|
309
|
+
}
|
|
310
|
+
};
|
|
311
|
+
ZoomBar.prototype.destroy = function () {
|
|
312
|
+
this.brush.on("start brush end", null); // remove event listener
|
|
313
|
+
this.services.events.removeEventListener(Events.ZoomBar.UPDATE, this.render.bind(this));
|
|
314
|
+
};
|
|
315
|
+
return ZoomBar;
|
|
316
|
+
}(Component));
|
|
317
|
+
export { ZoomBar };
|
|
318
|
+
//# sourceMappingURL=../../../src/components/axes/zoom-bar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zoom-bar.js","sourceRoot":"","sources":["zoom-bar.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { Tools } from \"../../tools\";\nimport { Events, ScaleTypes } from \"../../interfaces\";\nimport { DOMUtils } from \"../../services\";\nimport * as Configuration from \"../../configuration\";\n\n// D3 Imports\nimport { extent } from \"d3-array\";\nimport { brushX } from \"d3-brush\";\nimport { area, line } from \"d3-shape\";\nimport { event } from \"d3-selection\";\n\nexport class ZoomBar extends Component {\n\ttype = \"zoom-bar\";\n\n\t// The minimum selection x range to trigger handler update\n\t// Smaller number may introduce a handler flash during initialization\n\t// Bigger number may not trigger handler update while selection area on chart is very small\n\tMIN_SELECTION_DIFF = 9e-10;\n\n\t// needs to match the style in _zoom-bar.scss\n\tbrushSelector = \"g.zoom-bar-brush\";\n\n\t// The max allowed selection range, will be updated soon in render()\n\tmaxSelectionRange: [0, 0];\n\n\t// Give every zoomBarClip a distinct ID\n\t// so they don't interfere the other zoom bars in a page\n\tclipId = \"zoomBarClip-\" + Math.floor(Math.random() * 99999999999);\n\n\tbrush = brushX();\n\txScale: any;\n\tyScale: any;\n\n\tinit() {\n\t\tthis.services.events.addEventListener(\n\t\t\tEvents.ZoomBar.UPDATE,\n\t\t\tthis.render.bind(this)\n\t\t);\n\n\t\t// get initZoomDomain\n\t\tconst initialZoomDomain = Tools.getProperty(\n\t\t\tthis.model.getOptions(),\n\t\t\t\"zoomBar\",\n\t\t\t\"top\",\n\t\t\t\"initialZoomDomain\"\n\t\t);\n\t\tif (initialZoomDomain !== null) {\n\t\t\tthis.model.set(\n\t\t\t\t{ zoomDomain: initialZoomDomain },\n\t\t\t\t{ skipUpdate: true }\n\t\t\t);\n\t\t}\n\t}\n\n\trender(animate = true) {\n\t\tconst svg = this.getContainerSVG();\n\t\tconst isDataLoading = Tools.getProperty(\n\t\t\tthis.model.getOptions(),\n\t\t\t\"data\",\n\t\t\t\"loading\"\n\t\t);\n\n\t\tconst { width } = DOMUtils.getSVGElementSize(this.parent, {\n\t\t\tuseAttrs: true\n\t\t});\n\n\t\t// get axes margins\n\t\tlet axesLeftMargin = 0;\n\t\tconst axesMargins = this.model.get(\"axesMargins\");\n\t\tif (axesMargins && axesMargins.left) {\n\t\t\taxesLeftMargin = axesMargins.left;\n\t\t}\n\n\t\tconst container = DOMUtils.appendOrSelect(svg, \"svg.zoom-container\")\n\t\t\t.attr(\"width\", \"100%\")\n\t\t\t.attr(\"height\", Configuration.zoomBar.height)\n\t\t\t.attr(\"opacity\", 1);\n\n\t\tconst spacer = DOMUtils.appendOrSelect(svg, \"rect.zoom-spacer\")\n\t\t\t.attr(\"x\", 0)\n\t\t\t.attr(\"y\", Configuration.zoomBar.height)\n\t\t\t.attr(\"width\", \"100%\")\n\t\t\t.attr(\"height\", Configuration.zoomBar.spacerHeight)\n\t\t\t.attr(\"opacity\", 1)\n\t\t\t.attr(\"fill\", \"none\");\n\n\t\tconst zoomBG = DOMUtils.appendOrSelect(container, \"rect.zoom-bg\")\n\t\t\t.attr(\"x\", axesLeftMargin)\n\t\t\t.attr(\"y\", 0)\n\t\t\t.attr(\"width\", width - axesLeftMargin)\n\t\t\t.attr(\"height\", \"100%\");\n\n\t\tif (isDataLoading) {\n\t\t\t// TODO - zoom bar skeleton could be improved in the future\n\t\t\treturn;\n\t\t}\n\n\t\tconst { cartesianScales } = this.services;\n\t\tconst mainXScale = cartesianScales.getMainXScale();\n\t\tconst mainYScale = cartesianScales.getMainYScale();\n\t\tconst mainXScaleType = cartesianScales.getMainXScaleType();\n\n\t\tif (mainXScale && mainXScaleType === ScaleTypes.TIME) {\n\t\t\tconst zoomBarData = this.services.zoom.getZoomBarData();\n\t\t\tthis.xScale = mainXScale.copy();\n\t\t\tthis.yScale = mainYScale.copy();\n\n\t\t\tconst defaultDomain = this.services.zoom.getDefaultZoomBarDomain();\n\n\t\t\t// add value 0 to the extended domain for zoom bar area graph\n\t\t\tthis.compensateDataForDefaultDomain(zoomBarData, defaultDomain);\n\n\t\t\tthis.xScale.range([axesLeftMargin, width]).domain(defaultDomain);\n\n\t\t\t// keep max selection range\n\t\t\tthis.maxSelectionRange = this.xScale.range();\n\n\t\t\tthis.yScale\n\t\t\t\t.range([0, Configuration.zoomBar.height - 6])\n\t\t\t\t.domain(extent(zoomBarData, (d: any) => d.value));\n\n\t\t\tconst zoomDomain = this.model.get(\"zoomDomain\");\n\n\t\t\tthis.renderZoomBarArea(\n\t\t\t\tcontainer,\n\t\t\t\t\"path.zoom-graph-area-unselected\",\n\t\t\t\tzoomBarData,\n\t\t\t\tnull\n\t\t\t);\n\t\t\tthis.updateClipPath(svg, this.clipId, 0, 0, 0, 0);\n\t\t\tthis.renderZoomBarArea(\n\t\t\t\tcontainer,\n\t\t\t\t\"path.zoom-graph-area\",\n\t\t\t\tzoomBarData,\n\t\t\t\tthis.clipId\n\t\t\t);\n\n\t\t\t// Draw the zoom base line\n\t\t\tconst baselineGenerator = line()([\n\t\t\t\t[axesLeftMargin, Configuration.zoomBar.height],\n\t\t\t\t[width, Configuration.zoomBar.height]\n\t\t\t]);\n\t\t\tconst zoomBaseline = DOMUtils.appendOrSelect(\n\t\t\t\tcontainer,\n\t\t\t\t\"path.zoom-bg-baseline\"\n\t\t\t).attr(\"d\", baselineGenerator);\n\n\t\t\t// Attach brushing event listeners\n\t\t\tthis.addBrushEventListener(zoomDomain, axesLeftMargin, width);\n\n\t\t\t// Draw the brushing area\n\t\t\tconst brushArea = DOMUtils.appendOrSelect(\n\t\t\t\tsvg,\n\t\t\t\tthis.brushSelector\n\t\t\t).call(this.brush);\n\n\t\t\tif (zoomDomain === undefined) {\n\t\t\t\t// do nothing, initialization not completed yet\n\t\t\t\t// don't update brushHandle to avoid flash\n\t\t\t} else if (zoomDomain[0].valueOf() === zoomDomain[1].valueOf()) {\n\t\t\t\tbrushArea.call(this.brush.move, this.xScale.range()); // default to full range\n\t\t\t\tthis.updateBrushHandle(\n\t\t\t\t\tthis.getContainerSVG(),\n\t\t\t\t\tthis.xScale.range(),\n\t\t\t\t\tthis.xScale.domain()\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tconst selected = zoomDomain.map((domain) =>\n\t\t\t\t\tthis.xScale(domain)\n\t\t\t\t);\n\t\t\t\tif (selected[1] - selected[0] < this.MIN_SELECTION_DIFF) {\n\t\t\t\t\t// initialization not completed yet\n\t\t\t\t\t// don't update brushHandle to avoid flash\n\t\t\t\t} else {\n\t\t\t\t\tbrushArea.call(this.brush.move, selected); // set brush to correct position\n\t\t\t\t\tthis.updateBrushHandle(\n\t\t\t\t\t\tthis.getContainerSVG(),\n\t\t\t\t\t\tselected,\n\t\t\t\t\t\tzoomDomain\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\taddBrushEventListener(zoomDomain, axesLeftMargin, width) {\n\t\tconst brushEventListener = () => {\n\t\t\tconst selection = event.selection;\n\t\t\t// follow d3 behavior: when selection is null, reset default full range\n\t\t\t// select behavior is completed, but nothing selected\n\t\t\tif (selection === null) {\n\t\t\t\tthis.handleBrushedEvent(\n\t\t\t\t\tzoomDomain,\n\t\t\t\t\tthis.xScale,\n\t\t\t\t\tthis.xScale.range()\n\t\t\t\t);\n\t\t\t} else if (selection[0] === selection[1]) {\n\t\t\t\t// select behavior is not completed yet, do nothing\n\t\t\t} else {\n\t\t\t\tthis.handleBrushedEvent(zoomDomain, this.xScale, selection);\n\t\t\t}\n\t\t};\n\n\t\t// Initialize the d3 brush\n\t\tthis.brush\n\t\t\t.extent([\n\t\t\t\t[axesLeftMargin, 0],\n\t\t\t\t[width, Configuration.zoomBar.height]\n\t\t\t])\n\t\t\t.on(\"start brush end\", null) // remove old listener first\n\t\t\t.on(\"start brush end\", brushEventListener);\n\t}\n\n\t// brush event listener\n\thandleBrushedEvent(zoomDomain, scale, selection) {\n\t\tconst newDomain = [\n\t\t\tscale.invert(selection[0]),\n\t\t\tscale.invert(selection[1])\n\t\t];\n\n\t\t// update brush handle position\n\t\tthis.updateBrushHandle(this.getContainerSVG(), selection, newDomain);\n\n\t\t// be aware that the value of d3.event changes during an event!\n\t\t// update zoomDomain only if the event comes from mouse event\n\t\tif (\n\t\t\tevent.sourceEvent != null &&\n\t\t\t(event.sourceEvent.type === \"mousemove\" ||\n\t\t\t\tevent.sourceEvent.type === \"mouseup\" ||\n\t\t\t\tevent.sourceEvent.type === \"mousedown\")\n\t\t) {\n\t\t\t// only if zoomDomain is never set or needs update\n\t\t\tif (\n\t\t\t\tzoomDomain === undefined ||\n\t\t\t\tzoomDomain[0] !== newDomain[0] ||\n\t\t\t\tzoomDomain[1] !== newDomain[1]\n\t\t\t) {\n\t\t\t\tthis.model.set({ zoomDomain: newDomain }, { animate: false });\n\t\t\t}\n\n\t\t\t// dispatch selection events\n\t\t\tlet zoomBarEventType;\n\t\t\tif (event.type === \"start\") {\n\t\t\t\tzoomBarEventType = Events.ZoomBar.SELECTION_START;\n\t\t\t} else if (event.type === \"brush\") {\n\t\t\t\tzoomBarEventType = Events.ZoomBar.SELECTION_IN_PROGRESS;\n\t\t\t} else if (event.type === \"end\") {\n\t\t\t\tzoomBarEventType = Events.ZoomBar.SELECTION_END;\n\t\t\t}\n\t\t\tthis.services.events.dispatchEvent(zoomBarEventType, {\n\t\t\t\tselection,\n\t\t\t\tnewDomain\n\t\t\t});\n\t\t}\n\t}\n\n\tupdateBrushHandle(svg, selection, domain) {\n\t\tconst self = this;\n\t\tconst handleWidth = 5;\n\t\tconst handleHeight = Configuration.zoomBar.height;\n\t\tconst handleXDiff = -handleWidth / 2;\n\n\t\tconst handleBarWidth = 1;\n\t\tconst handleBarHeight = 12;\n\t\tconst handleBarXDiff = -handleBarWidth / 2;\n\t\tconst handleYBarDiff = (handleHeight - handleBarHeight) / 2;\n\n\t\t// handle\n\t\tsvg.select(this.brushSelector)\n\t\t\t.selectAll(\"rect.handle\")\n\t\t\t.data([{ type: \"w\" }, { type: \"e\" }])\n\t\t\t.attr(\"x\", function (d) {\n\t\t\t\tif (d.type === \"w\") {\n\t\t\t\t\t// handle should not exceed zoom bar range\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\tselection[0] + handleXDiff,\n\t\t\t\t\t\tself.maxSelectionRange[0]\n\t\t\t\t\t);\n\t\t\t\t} else if (d.type === \"e\") {\n\t\t\t\t\t// handle should not exceed zoom bar range\n\t\t\t\t\treturn Math.min(\n\t\t\t\t\t\tselection[1] + handleXDiff,\n\t\t\t\t\t\tself.maxSelectionRange[1] - handleWidth\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.attr(\"y\", 0)\n\t\t\t.attr(\"width\", handleWidth)\n\t\t\t.attr(\"height\", handleHeight)\n\t\t\t.attr(\"cursor\", \"pointer\")\n\t\t\t.style(\"display\", null); // always display\n\n\t\t// handle-bar\n\t\tconst handleBars = svg\n\t\t\t.select(this.brushSelector)\n\t\t\t.selectAll(\"rect.handle-bar\")\n\t\t\t.data([{ type: \"w\" }, { type: \"e\" }]);\n\t\t// create rect if not exists\n\t\thandleBars\n\t\t\t.enter()\n\t\t\t.append(\"rect\")\n\t\t\t.attr(\"class\", function (d) {\n\t\t\t\treturn \"handle-bar handle-bar--\" + d.type;\n\t\t\t});\n\t\t// update positions\n\t\thandleBars\n\t\t\t.attr(\"x\", function (d) {\n\t\t\t\tif (d.type === \"w\") {\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\tselection[0] + handleBarXDiff,\n\t\t\t\t\t\tself.maxSelectionRange[0] - handleXDiff + handleBarXDiff\n\t\t\t\t\t);\n\t\t\t\t} else if (d.type === \"e\") {\n\t\t\t\t\treturn Math.min(\n\t\t\t\t\t\tselection[1] + handleBarXDiff,\n\t\t\t\t\t\tself.maxSelectionRange[1] + handleXDiff + handleBarXDiff\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.attr(\"y\", handleYBarDiff)\n\t\t\t.attr(\"width\", handleBarWidth)\n\t\t\t.attr(\"height\", handleBarHeight)\n\t\t\t.attr(\"cursor\", \"pointer\");\n\n\t\tthis.updateClipPath(\n\t\t\tsvg,\n\t\t\tthis.clipId,\n\t\t\tselection[0],\n\t\t\t0,\n\t\t\tselection[1] - selection[0],\n\t\t\tConfiguration.zoomBar.height\n\t\t);\n\t}\n\n\trenderZoomBarArea(container, querySelector, data, clipId) {\n\t\tconst { cartesianScales } = this.services;\n\t\tconst mainXAxisPosition = cartesianScales.getMainXAxisPosition();\n\t\tconst mainYAxisPosition = cartesianScales.getMainYAxisPosition();\n\t\tconst mainXScaleType = cartesianScales.getMainXScaleType();\n\t\tconst mainYScaleType = cartesianScales.getMainYScaleType();\n\n\t\tconst accessorFunction = (scale, scaleType, axisPosition) => {\n\t\t\treturn (d, i) => {\n\t\t\t\treturn cartesianScales.getValueFromScale(\n\t\t\t\t\tscale,\n\t\t\t\t\tscaleType,\n\t\t\t\t\taxisPosition,\n\t\t\t\t\td,\n\t\t\t\t\ti\n\t\t\t\t);\n\t\t\t};\n\t\t};\n\n\t\tconst xAccessor = accessorFunction(\n\t\t\tthis.xScale,\n\t\t\tmainXScaleType,\n\t\t\tmainXAxisPosition\n\t\t);\n\t\tconst yAccessor = accessorFunction(\n\t\t\tthis.yScale,\n\t\t\tmainYScaleType,\n\t\t\tmainYAxisPosition\n\t\t);\n\t\tconst areaGenerator = area()\n\t\t\t.x((d, i) => xAccessor(d, i))\n\t\t\t.y0(Configuration.zoomBar.height)\n\t\t\t.y1((d, i) => Configuration.zoomBar.height - yAccessor(d, i));\n\n\t\tconst areaGraph = DOMUtils.appendOrSelect(container, querySelector)\n\t\t\t.datum(data)\n\t\t\t.attr(\"d\", areaGenerator);\n\n\t\tif (clipId) {\n\t\t\tareaGraph.attr(\"clip-path\", `url(#${clipId})`);\n\t\t}\n\t}\n\n\tupdateClipPath(svg, clipId, x, y, width, height) {\n\t\tconst zoomBarClipPath = DOMUtils.appendOrSelect(svg, `clipPath`).attr(\n\t\t\t\"id\",\n\t\t\tclipId\n\t\t);\n\t\tDOMUtils.appendOrSelect(zoomBarClipPath, \"rect\")\n\t\t\t.attr(\"x\", x)\n\t\t\t.attr(\"y\", y)\n\t\t\t.attr(\"width\", width)\n\t\t\t.attr(\"height\", height);\n\t}\n\n\t// assume the domains in data are already sorted\n\tcompensateDataForDefaultDomain(data, defaultDomain) {\n\t\tif (!data || data.length < 2) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst domainIdentifier = this.services.cartesianScales.getDomainIdentifier();\n\t\tconst rangeIdentifier = this.services.cartesianScales.getRangeIdentifier();\n\n\t\t// if min domain is extended\n\t\tif (Number(defaultDomain[0]) < Number(data[0][domainIdentifier])) {\n\t\t\tconst newDatum = {};\n\t\t\tnewDatum[domainIdentifier] = defaultDomain[0];\n\t\t\tnewDatum[rangeIdentifier] = 0;\n\t\t\tdata.unshift(newDatum);\n\t\t}\n\t\t// if max domain is extended\n\t\tif (\n\t\t\tNumber(defaultDomain[1]) >\n\t\t\tNumber(data[data.length - 1][domainIdentifier])\n\t\t) {\n\t\t\tconst newDatum = {};\n\t\t\tnewDatum[domainIdentifier] = defaultDomain[1];\n\t\t\tnewDatum[rangeIdentifier] = 0;\n\t\t\tdata.push(newDatum);\n\t\t}\n\t}\n\n\tdestroy() {\n\t\tthis.brush.on(\"start brush end\", null); // remove event listener\n\t\tthis.services.events.removeEventListener(\n\t\t\tEvents.ZoomBar.UPDATE,\n\t\t\tthis.render.bind(this)\n\t\t);\n\t}\n}\n"]}
|
package/components/component.js
CHANGED
|
@@ -48,10 +48,19 @@ var Component = /** @class */ (function () {
|
|
|
48
48
|
Component.prototype.getParent = function () {
|
|
49
49
|
return this.parent;
|
|
50
50
|
};
|
|
51
|
-
Component.prototype.getContainerSVG = function () {
|
|
51
|
+
Component.prototype.getContainerSVG = function (configs) {
|
|
52
|
+
if (configs === void 0) { configs = { withinChartClip: false }; }
|
|
52
53
|
if (this.type) {
|
|
53
54
|
var chartprefix = Tools.getProperty(this.model.getOptions(), "style", "prefix");
|
|
54
|
-
|
|
55
|
+
var svg = DOMUtils.appendOrSelect(this.parent, "g." + settings.prefix + "--" + chartprefix + "--" + this.type);
|
|
56
|
+
if (configs.withinChartClip) {
|
|
57
|
+
// get unique chartClipId int this chart from model
|
|
58
|
+
var chartClipId = this.model.get("chartClipId");
|
|
59
|
+
if (chartClipId) {
|
|
60
|
+
svg.attr("clip-path", "url(#" + chartClipId + ")");
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return svg;
|
|
55
64
|
}
|
|
56
65
|
return this.parent;
|
|
57
66
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sourceRoot":"","sources":["component.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,aAAa;AACb,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,yCAAyC;AACzC,OAAO,QAAQ,MAAM,0CAA0C,CAAC;AAEhE;IAUC,mBAAY,KAAiB,EAAE,QAAa,EAAE,OAAa;QALjD,YAAO,GAAQ,EAAE,CAAC;QAM3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEzB,IAAI,OAAO,EAAE;YACZ,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;SACvB;QAED,oEAAoE;QACpE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACjB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;SAC5D;IACF,CAAC;IAED,wBAAI,GAAJ,cAAQ,CAAC;IAET,0BAAM,GAAN,UAAO,OAAc;QAAd,wBAAA,EAAA,cAAc;QACpB,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACrD,CAAC;IAED,2BAAO,GAAP,cAAW,CAAC;IAEZ,kDAAkD;IAClD,4BAAQ,GAAR,UAAS,MAAM;QACd,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;IACrB,CAAC;IAED,kDAAkD;IAClD,+BAAW,GAAX,UAAY,MAAM;QACjB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,6BAAS,GAAT,UAAU,MAAM;QACf,IAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE;YACpD,OAAO;SACP;QAED,IAAI,IAAI,CAAC,IAAI,EAAE;YACd,IAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CACpC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EACvB,OAAO,EACP,QAAQ,CACR,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,OAAO,CACf,QAAQ,CAAC,MAAM,UAAK,WAAW,UAAK,IAAI,CAAC,IAAM,EAClD,IAAI,CACJ,CAAC;YAEF,IAAI,SAAS,EAAE;gBACd,SAAS,CAAC,OAAO,CACb,QAAQ,CAAC,MAAM,UAAK,WAAW,UAAK,IAAI,CAAC,IAAM,EAClD,KAAK,CACL,CAAC;aACF;SACD;IACF,CAAC;IAED,6BAAS,GAAT;QACC,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAED,mCAAe,GAAf;
|
|
1
|
+
{"version":3,"file":"component.js","sourceRoot":"","sources":["component.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { ChartModel } from \"../model\";\nimport { DOMUtils } from \"../services\";\nimport { Tools } from \"../tools\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\n\n// import the settings for the css prefix\nimport settings from \"carbon-components/es/globals/js/settings\";\n\nexport class Component {\n\tpublic type: string;\n\n\tprotected parent: any;\n\n\tprotected configs: any = {};\n\n\tprotected model: ChartModel;\n\tprotected services: any;\n\n\tconstructor(model: ChartModel, services: any, configs?: any) {\n\t\tthis.model = model;\n\t\tthis.services = services;\n\n\t\tif (configs) {\n\t\t\tthis.configs = configs;\n\t\t}\n\n\t\t// Set parent element to shell SVG if no parent exists for component\n\t\tif (!this.parent) {\n\t\t\tthis.setParent(select(this.services.domUtils.getMainSVG()));\n\t\t}\n\t}\n\n\tinit() {}\n\n\trender(animate = true) {\n\t\tconsole.error(\"render() method is not implemented\");\n\t}\n\n\tdestroy() {}\n\n\t// Used to pass down information to the components\n\tsetModel(newObj) {\n\t\tthis.model = newObj;\n\t}\n\n\t// Used to pass down information to the components\n\tsetServices(newObj) {\n\t\tthis.services = newObj;\n\t}\n\n\tsetParent(parent) {\n\t\tconst oldParent = this.parent;\n\t\tthis.parent = parent;\n\n\t\tif (oldParent && oldParent.node() === parent.node()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.type) {\n\t\t\tconst chartprefix = Tools.getProperty(\n\t\t\t\tthis.model.getOptions(),\n\t\t\t\t\"style\",\n\t\t\t\t\"prefix\"\n\t\t\t);\n\t\t\tthis.parent.classed(\n\t\t\t\t`${settings.prefix}--${chartprefix}--${this.type}`,\n\t\t\t\ttrue\n\t\t\t);\n\n\t\t\tif (oldParent) {\n\t\t\t\toldParent.classed(\n\t\t\t\t\t`${settings.prefix}--${chartprefix}--${this.type}`,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tgetParent() {\n\t\treturn this.parent;\n\t}\n\n\tgetContainerSVG(configs = { withinChartClip: false }) {\n\t\tif (this.type) {\n\t\t\tconst chartprefix = Tools.getProperty(\n\t\t\t\tthis.model.getOptions(),\n\t\t\t\t\"style\",\n\t\t\t\t\"prefix\"\n\t\t\t);\n\n\t\t\tconst svg = DOMUtils.appendOrSelect(\n\t\t\t\tthis.parent,\n\t\t\t\t`g.${settings.prefix}--${chartprefix}--${this.type}`\n\t\t\t);\n\n\t\t\tif (configs.withinChartClip) {\n\t\t\t\t// get unique chartClipId int this chart from model\n\t\t\t\tconst chartClipId = this.model.get(\"chartClipId\");\n\t\t\t\tif (chartClipId) {\n\t\t\t\t\tsvg.attr(\"clip-path\", `url(#${chartClipId})`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn svg;\n\t\t}\n\n\t\treturn this.parent;\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legend.js","sourceRoot":"","sources":["legend.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { Tools } from \"../../tools\";\nimport {\n\tLegendOrientations,\n\tRoles,\n\tEvents,\n\tTruncationTypes\n} from \"../../interfaces\";\nimport { DOMUtils } from \"../../services\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\n\nexport class Legend extends Component {\n\ttype = \"legend\";\n\n\trender() {\n\t\tconst svg = this.getContainerSVG().attr(\n\t\t\t\"role\",\n\t\t\t`${Roles.GRAPHICS_DOCUMENT} ${Roles.DOCUMENT}`\n\t\t);\n\t\tconst options = this.model.getOptions();\n\t\tconst legendOptions = Tools.getProperty(options, \"legend\");\n\t\tconst legendItems = svg\n\t\t\t.selectAll(\"g.legend-item\")\n\t\t\t.data(this.model.getDataGroups(), (dataGroup) => dataGroup.name);\n\n\t\t// this.getLegendItemArray()\n\n\t\tconst addedLegendItems = legendItems\n\t\t\t.enter()\n\t\t\t.append(\"g\")\n\t\t\t.classed(\"legend-item\", true)\n\t\t\t.classed(\"active\", function (d, i) {\n\t\t\t\treturn d.status === options.legend.items.status.ACTIVE;\n\t\t\t});\n\n\t\t// Configs\n\t\tconst checkboxRadius = options.legend.checkbox.radius;\n\n\t\t// Truncation\n\t\t// get user provided custom values for truncation\n\t\tconst truncationType = Tools.getProperty(\n\t\t\tlegendOptions,\n\t\t\t\"truncation\",\n\t\t\t\"type\"\n\t\t);\n\t\tconst truncationThreshold = Tools.getProperty(\n\t\t\tlegendOptions,\n\t\t\t\"truncation\",\n\t\t\t\"threshold\"\n\t\t);\n\t\tconst truncationNumCharacter = Tools.getProperty(\n\t\t\tlegendOptions,\n\t\t\t\"truncation\",\n\t\t\t\"numCharacter\"\n\t\t);\n\n\t\taddedLegendItems\n\t\t\t.append(\"rect\")\n\t\t\t.classed(\"checkbox\", true)\n\t\t\t.merge(legendItems.select(\"rect.checkbox\"))\n\t\t\t.attr(\"width\", checkboxRadius * 2)\n\t\t\t.attr(\"height\", checkboxRadius * 2)\n\t\t\t.attr(\"rx\", 1)\n\t\t\t.attr(\"ry\", 1)\n\t\t\t.style(\"fill\", (d) => {\n\t\t\t\treturn d.status === options.legend.items.status.ACTIVE\n\t\t\t\t\t? this.model.getStrokeColor(d.name)\n\t\t\t\t\t: null;\n\t\t\t})\n\t\t\t.classed(\"active\", function (d, i) {\n\t\t\t\treturn d.status === options.legend.items.status.ACTIVE;\n\t\t\t});\n\t\tconst addedLegendItemsText = addedLegendItems\n\t\t\t.append(\"text\")\n\t\t\t.merge(legendItems.select(\"text\"));\n\n\t\t// truncate the legend label if it's too long\n\t\tif (truncationType !== TruncationTypes.NONE) {\n\t\t\taddedLegendItemsText.html(function (d) {\n\t\t\t\tif (d.name.length > truncationThreshold) {\n\t\t\t\t\treturn Tools.truncateLabel(\n\t\t\t\t\t\td.name,\n\t\t\t\t\t\ttruncationType,\n\t\t\t\t\t\ttruncationNumCharacter\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\treturn d.name;\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\taddedLegendItemsText.html((d) => d.name);\n\t\t}\n\n\t\tthis.breakItemsIntoLines(addedLegendItems);\n\n\t\t// Remove old elements as needed.\n\t\tlegendItems\n\t\t\t.exit()\n\t\t\t.on(\"mouseover\", null)\n\t\t\t.on(\"click\", null)\n\t\t\t.on(\"mouseout\", null)\n\t\t\t.remove();\n\n\t\tconst legendClickable = Tools.getProperty(\n\t\t\tthis.model.getOptions(),\n\t\t\t\"legend\",\n\t\t\t\"clickable\"\n\t\t);\n\t\tsvg.classed(\"clickable\", legendClickable);\n\n\t\tif (legendClickable && addedLegendItems.size() > 0) {\n\t\t\tthis.addEventListeners();\n\t\t}\n\n\t\tconst alignment = Tools.getProperty(legendOptions,\"alignment\");\n\n\t\tconst alignmentOffset = DOMUtils.getAlignmentOffset(alignment, svg, this.getParent());\n\t\tsvg.attr(\"transform\", `translate(${alignmentOffset}, 0)`);\n\t}\n\n\tbreakItemsIntoLines(addedLegendItems) {\n\t\tconst self = this;\n\t\tconst svg = this.getContainerSVG();\n\t\tconst options = this.model.getOptions();\n\n\t\t// Configs\n\t\tconst checkboxRadius = options.legend.checkbox.radius;\n\t\tconst legendItemsHorizontalSpacing =\n\t\t\toptions.legend.items.horizontalSpace;\n\t\tconst legendItemsVerticalSpacing = options.legend.items.verticalSpace;\n\t\tconst legendTextYOffset = options.legend.items.textYOffset;\n\t\tconst spaceNeededForCheckbox =\n\t\t\tcheckboxRadius * 2 + options.legend.checkbox.spaceAfter;\n\n\t\t// Check if there are disabled legend items\n\t\tconst { DISABLED } = options.legend.items.status;\n\t\tconst dataGroups = this.model.getDataGroups();\n\t\tconst hasDeactivatedItems = dataGroups.some(\n\t\t\t(dataGroup) => dataGroup.status === DISABLED\n\t\t);\n\n\t\tconst legendOrientation = Tools.getProperty(\n\t\t\toptions,\n\t\t\t\"legend\",\n\t\t\t\"orientation\"\n\t\t);\n\n\t\t// Keep track of line numbers and positions\n\t\tlet startingPoint = 0;\n\t\tlet lineNumber = 0;\n\t\tlet itemIndexInLine = 0;\n\t\tlet lastYPosition;\n\t\taddedLegendItems\n\t\t\t.merge(svg.selectAll(\"g.legend-item\"))\n\t\t\t.each(function (d, i) {\n\t\t\t\tconst legendItem = select(this);\n\t\t\t\tconst previousLegendItem = select(\n\t\t\t\t\tsvg.selectAll(\"g.legend-item\").nodes()[i - 1]\n\t\t\t\t);\n\n\t\t\t\tif (\n\t\t\t\t\titemIndexInLine === 0 ||\n\t\t\t\t\tpreviousLegendItem.empty() ||\n\t\t\t\t\tlegendOrientation === LegendOrientations.VERTICAL\n\t\t\t\t) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tlegendOrientation === LegendOrientations.VERTICAL &&\n\t\t\t\t\t\ti !== 0\n\t\t\t\t\t) {\n\t\t\t\t\t\tlineNumber++;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst svgDimensions = DOMUtils.getSVGElementSize(\n\t\t\t\t\t\tself.parent,\n\t\t\t\t\t\t{ useAttr: true }\n\t\t\t\t\t);\n\t\t\t\t\tconst legendItemTextDimensions = DOMUtils.getSVGElementSize(\n\t\t\t\t\t\tselect(this).select(\"text\"),\n\t\t\t\t\t\t{ useBBox: true }\n\t\t\t\t\t);\n\t\t\t\t\tconst lastLegendItemTextDimensions = DOMUtils.getSVGElementSize(\n\t\t\t\t\t\tpreviousLegendItem.select(\"text\"),\n\t\t\t\t\t\t{ useBBox: true }\n\t\t\t\t\t);\n\t\t\t\t\tstartingPoint =\n\t\t\t\t\t\tstartingPoint +\n\t\t\t\t\t\tlastLegendItemTextDimensions.width +\n\t\t\t\t\t\tspaceNeededForCheckbox +\n\t\t\t\t\t\tlegendItemsHorizontalSpacing;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tstartingPoint +\n\t\t\t\t\t\t\tspaceNeededForCheckbox +\n\t\t\t\t\t\t\tlegendItemTextDimensions.width >\n\t\t\t\t\t\tsvgDimensions.width\n\t\t\t\t\t) {\n\t\t\t\t\t\tlineNumber++;\n\t\t\t\t\t\tstartingPoint = 0;\n\t\t\t\t\t\titemIndexInLine = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst yOffset = 0;\n\n\t\t\t\t// Position checkbox\n\t\t\t\t// TODO - Replace with layout component margins\n\t\t\t\tlegendItem\n\t\t\t\t\t.select(\"rect.checkbox\")\n\t\t\t\t\t.attr(\"x\", startingPoint)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t\"y\",\n\t\t\t\t\t\tyOffset + lineNumber * legendItemsVerticalSpacing\n\t\t\t\t\t);\n\n\t\t\t\t// Position text\n\t\t\t\t// TODO - Replace with layout component margins\n\t\t\t\tconst yPosition =\n\t\t\t\t\tlegendTextYOffset + lineNumber * legendItemsVerticalSpacing;\n\t\t\t\tlegendItem\n\t\t\t\t\t.select(\"text\")\n\t\t\t\t\t.attr(\"x\", startingPoint + spaceNeededForCheckbox)\n\t\t\t\t\t.attr(\"y\", yOffset + yPosition + 3);\n\n\t\t\t\tlastYPosition = yPosition;\n\n\t\t\t\t// Test if legendItems are placed in the correct direction\n\t\t\t\tconst testHorizontal =\n\t\t\t\t\t(!legendOrientation ||\n\t\t\t\t\t\tlegendOrientation === LegendOrientations.HORIZONTAL) &&\n\t\t\t\t\tlegendItem.select(\"rect.checkbox\").attr(\"y\") === \"0\";\n\n\t\t\t\tconst testVertical =\n\t\t\t\t\tlegendOrientation === LegendOrientations.VERTICAL &&\n\t\t\t\t\tlegendItem.select(\"rect.checkbox\").attr(\"x\") === \"0\";\n\n\t\t\t\tconst hasCorrectLegendDirection =\n\t\t\t\t\ttestHorizontal || testVertical;\n\n\t\t\t\t// Render checkbox check icon\n\t\t\t\tif (\n\t\t\t\t\thasDeactivatedItems &&\n\t\t\t\t\tlegendItem.select(\"g.check\").empty() &&\n\t\t\t\t\thasCorrectLegendDirection\n\t\t\t\t) {\n\t\t\t\t\tlegendItem.append(\"g\").classed(\"check\", true).html(`\n\t\t\t\t\t\t\t<svg focusable=\"false\" preserveAspectRatio=\"xMidYMid meet\"\n\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 32 32\" aria-hidden=\"true\"\n\t\t\t\t\t\t\t\tstyle=\"will-change: transform;\">\n\t\t\t\t\t\t\t\t<path d=\"M13 21.2l-7.1-7.1-1.4 1.4 7.1 7.1L13 24 27.1 9.9l-1.4-1.5z\"></path>\n\t\t\t\t\t\t\t\t<title>Checkmark</title>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t`);\n\n\t\t\t\t\tlegendItem\n\t\t\t\t\t\t.select(\"g.check svg\")\n\t\t\t\t\t\t.attr(\"width\", checkboxRadius * 2 - 1)\n\t\t\t\t\t\t.attr(\"height\", checkboxRadius * 2 - 1)\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\"x\",\n\t\t\t\t\t\t\tparseFloat(\n\t\t\t\t\t\t\t\tlegendItem.select(\"rect.checkbox\").attr(\"x\")\n\t\t\t\t\t\t\t) + 0.5\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\"y\",\n\t\t\t\t\t\t\tparseFloat(\n\t\t\t\t\t\t\t\tlegendItem.select(\"rect.checkbox\").attr(\"y\")\n\t\t\t\t\t\t\t) + 0.5\n\t\t\t\t\t\t);\n\t\t\t\t} else if (\n\t\t\t\t\t!hasDeactivatedItems &&\n\t\t\t\t\t!legendItem.select(\"g.check\").empty()\n\t\t\t\t) {\n\t\t\t\t\tlegendItem.select(\"g.check\").remove();\n\t\t\t\t}\n\n\t\t\t\titemIndexInLine++;\n\t\t\t});\n\t}\n\n\taddEventListeners() {\n\t\tconst self = this;\n\t\tconst svg = this.getContainerSVG();\n\t\tconst options = this.model.getOptions();\n\t\tconst legendOptions = Tools.getProperty(options, \"legend\");\n\t\tconst truncationThreshold = Tools.getProperty(\n\t\t\tlegendOptions,\n\t\t\t\"truncation\",\n\t\t\t\"threshold\"\n\t\t);\n\n\t\tsvg.selectAll(\"g.legend-item\")\n\t\t\t.on(\"mouseover\", function () {\n\t\t\t\tself.services.events.dispatchEvent(Events.Legend.ITEM_HOVER, {\n\t\t\t\t\thoveredElement: select(this)\n\t\t\t\t});\n\n\t\t\t\t// Configs\n\t\t\t\tconst checkboxRadius = options.legend.checkbox.radius;\n\t\t\t\tconst hoveredItem = select(this);\n\t\t\t\thoveredItem\n\t\t\t\t\t.append(\"rect\")\n\t\t\t\t\t.classed(\"hover-stroke\", true)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t\"x\",\n\t\t\t\t\t\tparseFloat(\n\t\t\t\t\t\t\thoveredItem.select(\"rect.checkbox\").attr(\"x\")\n\t\t\t\t\t\t) - 2\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t\"y\",\n\t\t\t\t\t\tparseFloat(\n\t\t\t\t\t\t\thoveredItem.select(\"rect.checkbox\").attr(\"y\")\n\t\t\t\t\t\t) - 2\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\"width\", checkboxRadius * 2 + 4)\n\t\t\t\t\t.attr(\"height\", checkboxRadius * 2 + 4)\n\t\t\t\t\t.attr(\"rx\", 3)\n\t\t\t\t\t.attr(\"ry\", 3)\n\t\t\t\t\t.lower();\n\n\t\t\t\tconst hoveredItemData = hoveredItem.datum() as any;\n\t\t\t\tif (hoveredItemData.name.length > truncationThreshold) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\t\thoveredElement: hoveredItem,\n\t\t\t\t\t\tcontent: hoveredItemData.name\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on(\"mousemove\", function () {\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.MOVE);\n\t\t\t})\n\t\t\t.on(\"click\", function () {\n\t\t\t\tself.services.events.dispatchEvent(Events.Legend.ITEM_CLICK, {\n\t\t\t\t\tclickedElement: select(this)\n\t\t\t\t});\n\n\t\t\t\tconst clickedItem = select(this);\n\t\t\t\tconst clickedItemData = clickedItem.datum() as any;\n\n\t\t\t\tself.model.toggleDataLabel(clickedItemData.name);\n\t\t\t})\n\t\t\t.on(\"mouseout\", function () {\n\t\t\t\tconst hoveredItem = select(this);\n\t\t\t\thoveredItem.select(\"rect.hover-stroke\").remove();\n\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE);\n\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Legend.ITEM_MOUSEOUT,\n\t\t\t\t\t{\n\t\t\t\t\t\thoveredElement: hoveredItem\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t});\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"legend.js","sourceRoot":"","sources":["legend.ts"],"names":[],"mappings":"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","sourcesContent":["// Internal Imports\nimport { Component } from \"../component\";\nimport { Tools } from \"../../tools\";\nimport {\n\tLegendOrientations,\n\tRoles,\n\tEvents,\n\tTruncationTypes\n} from \"../../interfaces\";\nimport { DOMUtils } from \"../../services\";\n\n// D3 Imports\nimport { select } from \"d3-selection\";\n\nexport class Legend extends Component {\n\ttype = \"legend\";\n\n\trender() {\n\t\tconst svg = this.getContainerSVG().attr(\n\t\t\t\"role\",\n\t\t\t`${Roles.GRAPHICS_DOCUMENT} ${Roles.DOCUMENT}`\n\t\t);\n\t\tconst options = this.model.getOptions();\n\t\tconst legendOptions = Tools.getProperty(options, \"legend\");\n\t\tconst legendItems = svg\n\t\t\t.selectAll(\"g.legend-item\")\n\t\t\t.data(this.model.getDataGroups(), (dataGroup) => dataGroup.name);\n\n\t\t// this.getLegendItemArray()\n\n\t\tconst addedLegendItems = legendItems\n\t\t\t.enter()\n\t\t\t.append(\"g\")\n\t\t\t.classed(\"legend-item\", true)\n\t\t\t.classed(\"active\", function (d, i) {\n\t\t\t\treturn d.status === options.legend.items.status.ACTIVE;\n\t\t\t});\n\n\t\t// Configs\n\t\tconst checkboxRadius = options.legend.checkbox.radius;\n\n\t\t// Truncation\n\t\t// get user provided custom values for truncation\n\t\tconst truncationType = Tools.getProperty(\n\t\t\tlegendOptions,\n\t\t\t\"truncation\",\n\t\t\t\"type\"\n\t\t);\n\t\tconst truncationThreshold = Tools.getProperty(\n\t\t\tlegendOptions,\n\t\t\t\"truncation\",\n\t\t\t\"threshold\"\n\t\t);\n\t\tconst truncationNumCharacter = Tools.getProperty(\n\t\t\tlegendOptions,\n\t\t\t\"truncation\",\n\t\t\t\"numCharacter\"\n\t\t);\n\n\t\taddedLegendItems\n\t\t\t.append(\"rect\")\n\t\t\t.classed(\"checkbox\", true)\n\t\t\t.merge(legendItems.select(\"rect.checkbox\"))\n\t\t\t.attr(\"width\", checkboxRadius * 2)\n\t\t\t.attr(\"height\", checkboxRadius * 2)\n\t\t\t.attr(\"rx\", 1)\n\t\t\t.attr(\"ry\", 1)\n\t\t\t.style(\"fill\", (d) => {\n\t\t\t\treturn d.status === options.legend.items.status.ACTIVE\n\t\t\t\t\t? this.model.getStrokeColor(d.name)\n\t\t\t\t\t: null;\n\t\t\t})\n\t\t\t.classed(\"active\", function (d, i) {\n\t\t\t\treturn d.status === options.legend.items.status.ACTIVE;\n\t\t\t});\n\t\tconst addedLegendItemsText = addedLegendItems\n\t\t\t.append(\"text\")\n\t\t\t.merge(legendItems.select(\"text\"));\n\n\t\t// truncate the legend label if it's too long\n\t\tif (truncationType !== TruncationTypes.NONE) {\n\t\t\taddedLegendItemsText.html(function (d) {\n\t\t\t\tif (d.name.length > truncationThreshold) {\n\t\t\t\t\treturn Tools.truncateLabel(\n\t\t\t\t\t\td.name,\n\t\t\t\t\t\ttruncationType,\n\t\t\t\t\t\ttruncationNumCharacter\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\treturn d.name;\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\taddedLegendItemsText.html((d) => d.name);\n\t\t}\n\n\t\tthis.breakItemsIntoLines(addedLegendItems);\n\n\t\t// Remove old elements as needed.\n\t\tlegendItems\n\t\t\t.exit()\n\t\t\t.on(\"mouseover\", null)\n\t\t\t.on(\"click\", null)\n\t\t\t.on(\"mouseout\", null)\n\t\t\t.remove();\n\n\t\tconst legendClickable = Tools.getProperty(\n\t\t\tthis.model.getOptions(),\n\t\t\t\"legend\",\n\t\t\t\"clickable\"\n\t\t);\n\t\tsvg.classed(\"clickable\", legendClickable);\n\n\t\tif (legendClickable && addedLegendItems.size() > 0) {\n\t\t\tthis.addEventListeners();\n\t\t}\n\n\t\tconst alignment = Tools.getProperty(legendOptions, \"alignment\");\n\n\t\tconst alignmentOffset = DOMUtils.getAlignmentOffset(\n\t\t\talignment,\n\t\t\tsvg,\n\t\t\tthis.getParent()\n\t\t);\n\t\tsvg.attr(\"transform\", `translate(${alignmentOffset}, 0)`);\n\t}\n\n\tbreakItemsIntoLines(addedLegendItems) {\n\t\tconst self = this;\n\t\tconst svg = this.getContainerSVG();\n\t\tconst options = this.model.getOptions();\n\n\t\t// Configs\n\t\tconst checkboxRadius = options.legend.checkbox.radius;\n\t\tconst legendItemsHorizontalSpacing =\n\t\t\toptions.legend.items.horizontalSpace;\n\t\tconst legendItemsVerticalSpacing = options.legend.items.verticalSpace;\n\t\tconst legendTextYOffset = options.legend.items.textYOffset;\n\t\tconst spaceNeededForCheckbox =\n\t\t\tcheckboxRadius * 2 + options.legend.checkbox.spaceAfter;\n\n\t\t// Check if there are disabled legend items\n\t\tconst { DISABLED } = options.legend.items.status;\n\t\tconst dataGroups = this.model.getDataGroups();\n\t\tconst hasDeactivatedItems = dataGroups.some(\n\t\t\t(dataGroup) => dataGroup.status === DISABLED\n\t\t);\n\n\t\tconst legendOrientation = Tools.getProperty(\n\t\t\toptions,\n\t\t\t\"legend\",\n\t\t\t\"orientation\"\n\t\t);\n\n\t\t// Keep track of line numbers and positions\n\t\tlet startingPoint = 0;\n\t\tlet lineNumber = 0;\n\t\tlet itemIndexInLine = 0;\n\t\tlet lastYPosition;\n\t\taddedLegendItems\n\t\t\t.merge(svg.selectAll(\"g.legend-item\"))\n\t\t\t.each(function (d, i) {\n\t\t\t\tconst legendItem = select(this);\n\t\t\t\tconst previousLegendItem = select(\n\t\t\t\t\tsvg.selectAll(\"g.legend-item\").nodes()[i - 1]\n\t\t\t\t);\n\n\t\t\t\tif (\n\t\t\t\t\titemIndexInLine === 0 ||\n\t\t\t\t\tpreviousLegendItem.empty() ||\n\t\t\t\t\tlegendOrientation === LegendOrientations.VERTICAL\n\t\t\t\t) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tlegendOrientation === LegendOrientations.VERTICAL &&\n\t\t\t\t\t\ti !== 0\n\t\t\t\t\t) {\n\t\t\t\t\t\tlineNumber++;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst svgDimensions = DOMUtils.getSVGElementSize(\n\t\t\t\t\t\tself.parent,\n\t\t\t\t\t\t{ useAttr: true }\n\t\t\t\t\t);\n\t\t\t\t\tconst legendItemTextDimensions = DOMUtils.getSVGElementSize(\n\t\t\t\t\t\tselect(this).select(\"text\"),\n\t\t\t\t\t\t{ useBBox: true }\n\t\t\t\t\t);\n\t\t\t\t\tconst lastLegendItemTextDimensions = DOMUtils.getSVGElementSize(\n\t\t\t\t\t\tpreviousLegendItem.select(\"text\"),\n\t\t\t\t\t\t{ useBBox: true }\n\t\t\t\t\t);\n\t\t\t\t\tstartingPoint =\n\t\t\t\t\t\tstartingPoint +\n\t\t\t\t\t\tlastLegendItemTextDimensions.width +\n\t\t\t\t\t\tspaceNeededForCheckbox +\n\t\t\t\t\t\tlegendItemsHorizontalSpacing;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tstartingPoint +\n\t\t\t\t\t\t\tspaceNeededForCheckbox +\n\t\t\t\t\t\t\tlegendItemTextDimensions.width >\n\t\t\t\t\t\tsvgDimensions.width\n\t\t\t\t\t) {\n\t\t\t\t\t\tlineNumber++;\n\t\t\t\t\t\tstartingPoint = 0;\n\t\t\t\t\t\titemIndexInLine = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst yOffset = 0;\n\n\t\t\t\t// Position checkbox\n\t\t\t\t// TODO - Replace with layout component margins\n\t\t\t\tlegendItem\n\t\t\t\t\t.select(\"rect.checkbox\")\n\t\t\t\t\t.attr(\"x\", startingPoint)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t\"y\",\n\t\t\t\t\t\tyOffset + lineNumber * legendItemsVerticalSpacing\n\t\t\t\t\t);\n\n\t\t\t\t// Position text\n\t\t\t\t// TODO - Replace with layout component margins\n\t\t\t\tconst yPosition =\n\t\t\t\t\tlegendTextYOffset + lineNumber * legendItemsVerticalSpacing;\n\t\t\t\tlegendItem\n\t\t\t\t\t.select(\"text\")\n\t\t\t\t\t.attr(\"x\", startingPoint + spaceNeededForCheckbox)\n\t\t\t\t\t.attr(\"y\", yOffset + yPosition + 3);\n\n\t\t\t\tlastYPosition = yPosition;\n\n\t\t\t\t// Test if legendItems are placed in the correct direction\n\t\t\t\tconst testHorizontal =\n\t\t\t\t\t(!legendOrientation ||\n\t\t\t\t\t\tlegendOrientation === LegendOrientations.HORIZONTAL) &&\n\t\t\t\t\tlegendItem.select(\"rect.checkbox\").attr(\"y\") === \"0\";\n\n\t\t\t\tconst testVertical =\n\t\t\t\t\tlegendOrientation === LegendOrientations.VERTICAL &&\n\t\t\t\t\tlegendItem.select(\"rect.checkbox\").attr(\"x\") === \"0\";\n\n\t\t\t\tconst hasCorrectLegendDirection =\n\t\t\t\t\ttestHorizontal || testVertical;\n\n\t\t\t\t// Render checkbox check icon\n\t\t\t\tif (\n\t\t\t\t\thasDeactivatedItems &&\n\t\t\t\t\tlegendItem.select(\"g.check\").empty() &&\n\t\t\t\t\thasCorrectLegendDirection\n\t\t\t\t) {\n\t\t\t\t\tlegendItem.append(\"g\").classed(\"check\", true).html(`\n\t\t\t\t\t\t\t<svg focusable=\"false\" preserveAspectRatio=\"xMidYMid meet\"\n\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 32 32\" aria-hidden=\"true\"\n\t\t\t\t\t\t\t\tstyle=\"will-change: transform;\">\n\t\t\t\t\t\t\t\t<path d=\"M13 21.2l-7.1-7.1-1.4 1.4 7.1 7.1L13 24 27.1 9.9l-1.4-1.5z\"></path>\n\t\t\t\t\t\t\t\t<title>Checkmark</title>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t`);\n\n\t\t\t\t\tlegendItem\n\t\t\t\t\t\t.select(\"g.check svg\")\n\t\t\t\t\t\t.attr(\"width\", checkboxRadius * 2 - 1)\n\t\t\t\t\t\t.attr(\"height\", checkboxRadius * 2 - 1)\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\"x\",\n\t\t\t\t\t\t\tparseFloat(\n\t\t\t\t\t\t\t\tlegendItem.select(\"rect.checkbox\").attr(\"x\")\n\t\t\t\t\t\t\t) + 0.5\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t\"y\",\n\t\t\t\t\t\t\tparseFloat(\n\t\t\t\t\t\t\t\tlegendItem.select(\"rect.checkbox\").attr(\"y\")\n\t\t\t\t\t\t\t) + 0.5\n\t\t\t\t\t\t);\n\t\t\t\t} else if (\n\t\t\t\t\t!hasDeactivatedItems &&\n\t\t\t\t\t!legendItem.select(\"g.check\").empty()\n\t\t\t\t) {\n\t\t\t\t\tlegendItem.select(\"g.check\").remove();\n\t\t\t\t}\n\n\t\t\t\titemIndexInLine++;\n\t\t\t});\n\t}\n\n\taddEventListeners() {\n\t\tconst self = this;\n\t\tconst svg = this.getContainerSVG();\n\t\tconst options = this.model.getOptions();\n\t\tconst legendOptions = Tools.getProperty(options, \"legend\");\n\t\tconst truncationThreshold = Tools.getProperty(\n\t\t\tlegendOptions,\n\t\t\t\"truncation\",\n\t\t\t\"threshold\"\n\t\t);\n\n\t\tsvg.selectAll(\"g.legend-item\")\n\t\t\t.on(\"mouseover\", function () {\n\t\t\t\tself.services.events.dispatchEvent(Events.Legend.ITEM_HOVER, {\n\t\t\t\t\thoveredElement: select(this)\n\t\t\t\t});\n\n\t\t\t\t// Configs\n\t\t\t\tconst checkboxRadius = options.legend.checkbox.radius;\n\t\t\t\tconst hoveredItem = select(this);\n\t\t\t\thoveredItem\n\t\t\t\t\t.append(\"rect\")\n\t\t\t\t\t.classed(\"hover-stroke\", true)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t\"x\",\n\t\t\t\t\t\tparseFloat(\n\t\t\t\t\t\t\thoveredItem.select(\"rect.checkbox\").attr(\"x\")\n\t\t\t\t\t\t) - 2\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t\"y\",\n\t\t\t\t\t\tparseFloat(\n\t\t\t\t\t\t\thoveredItem.select(\"rect.checkbox\").attr(\"y\")\n\t\t\t\t\t\t) - 2\n\t\t\t\t\t)\n\t\t\t\t\t.attr(\"width\", checkboxRadius * 2 + 4)\n\t\t\t\t\t.attr(\"height\", checkboxRadius * 2 + 4)\n\t\t\t\t\t.attr(\"rx\", 3)\n\t\t\t\t\t.attr(\"ry\", 3)\n\t\t\t\t\t.lower();\n\n\t\t\t\tconst hoveredItemData = hoveredItem.datum() as any;\n\t\t\t\tif (hoveredItemData.name.length > truncationThreshold) {\n\t\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.SHOW, {\n\t\t\t\t\t\thoveredElement: hoveredItem,\n\t\t\t\t\t\tcontent: hoveredItemData.name\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on(\"mousemove\", function () {\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.MOVE);\n\t\t\t})\n\t\t\t.on(\"click\", function () {\n\t\t\t\tself.services.events.dispatchEvent(Events.Legend.ITEM_CLICK, {\n\t\t\t\t\tclickedElement: select(this)\n\t\t\t\t});\n\n\t\t\t\tconst clickedItem = select(this);\n\t\t\t\tconst clickedItemData = clickedItem.datum() as any;\n\n\t\t\t\tself.model.toggleDataLabel(clickedItemData.name);\n\t\t\t})\n\t\t\t.on(\"mouseout\", function () {\n\t\t\t\tconst hoveredItem = select(this);\n\t\t\t\thoveredItem.select(\"rect.hover-stroke\").remove();\n\n\t\t\t\tself.services.events.dispatchEvent(Events.Tooltip.HIDE);\n\n\t\t\t\tself.services.events.dispatchEvent(\n\t\t\t\t\tEvents.Legend.ITEM_MOUSEOUT,\n\t\t\t\t\t{\n\t\t\t\t\t\thoveredElement: hoveredItem\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t});\n\t}\n}\n"]}
|