@semcore/d3-chart 1.7.0 → 1.9.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 +18 -0
- package/lib/cjs/Axis.js +33 -21
- package/lib/cjs/Axis.js.map +1 -1
- package/lib/cjs/Bar.js +3 -3
- package/lib/cjs/Bar.js.map +1 -1
- package/lib/cjs/Bubble.js +3 -24
- package/lib/cjs/Bubble.js.map +1 -1
- package/lib/cjs/ClipPath.js +2 -1
- package/lib/cjs/ClipPath.js.map +1 -1
- package/lib/cjs/Donut.js +1 -1
- package/lib/cjs/Donut.js.map +1 -1
- package/lib/cjs/Dots.js +1 -1
- package/lib/cjs/Dots.js.map +1 -1
- package/lib/cjs/GroupBar.js +8 -8
- package/lib/cjs/GroupBar.js.map +1 -1
- package/lib/cjs/HorizontalBar.js +3 -3
- package/lib/cjs/HorizontalBar.js.map +1 -1
- package/lib/cjs/Plot.js +16 -2
- package/lib/cjs/Plot.js.map +1 -1
- package/lib/cjs/RadialTree.js +691 -0
- package/lib/cjs/RadialTree.js.map +1 -0
- package/lib/cjs/ResponsiveContainer.js +2 -2
- package/lib/cjs/ResponsiveContainer.js.map +1 -1
- package/lib/cjs/StackBar.js +8 -8
- package/lib/cjs/StackBar.js.map +1 -1
- package/lib/cjs/StackedArea.js +8 -8
- package/lib/cjs/StackedArea.js.map +1 -1
- package/lib/cjs/Tooltip.js +6 -10
- package/lib/cjs/Tooltip.js.map +1 -1
- package/lib/cjs/Venn.js +2 -2
- package/lib/cjs/Venn.js.map +1 -1
- package/lib/cjs/createElement.js +3 -2
- package/lib/cjs/createElement.js.map +1 -1
- package/lib/cjs/index.js +8 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/style/axis.shadow.css +2 -4
- package/lib/cjs/style/plot.shadow.css +6 -0
- package/lib/cjs/style/radial-tree.shadow.css +23 -0
- package/lib/cjs/types/Area.d.ts +47 -0
- package/lib/cjs/types/Axis.d.ts +64 -0
- package/lib/cjs/types/Bar.d.ts +48 -0
- package/lib/cjs/types/Bubble.d.ts +27 -0
- package/lib/cjs/types/ClipPath.d.ts +26 -0
- package/lib/cjs/types/Donut.d.ts +42 -0
- package/lib/cjs/types/GroupBar.d.ts +20 -0
- package/lib/cjs/types/HorizontalBar.d.ts +29 -0
- package/lib/cjs/types/Hover.d.ts +15 -0
- package/lib/cjs/types/Line.d.ts +50 -0
- package/lib/cjs/types/Plot.d.ts +16 -0
- package/lib/cjs/types/ResponsiveContainer.d.ts +20 -0
- package/lib/cjs/types/ScatterPlot.d.ts +27 -0
- package/lib/cjs/types/StackBar.d.ts +26 -0
- package/lib/cjs/types/StackedArea.d.ts +26 -0
- package/lib/cjs/types/Tooltip.d.ts +31 -0
- package/lib/cjs/types/Venn.d.ts +45 -0
- package/lib/cjs/types/context.d.ts +6 -0
- package/lib/cjs/types/index.d.ts +53 -0
- package/lib/cjs/utils.js +120 -55
- package/lib/cjs/utils.js.map +1 -1
- package/lib/es6/Axis.js +33 -21
- package/lib/es6/Axis.js.map +1 -1
- package/lib/es6/Bar.js +3 -3
- package/lib/es6/Bar.js.map +1 -1
- package/lib/es6/Bubble.js +3 -24
- package/lib/es6/Bubble.js.map +1 -1
- package/lib/es6/ClipPath.js +2 -1
- package/lib/es6/ClipPath.js.map +1 -1
- package/lib/es6/Donut.js +1 -1
- package/lib/es6/Donut.js.map +1 -1
- package/lib/es6/Dots.js +1 -1
- package/lib/es6/Dots.js.map +1 -1
- package/lib/es6/GroupBar.js +8 -8
- package/lib/es6/GroupBar.js.map +1 -1
- package/lib/es6/HorizontalBar.js +3 -3
- package/lib/es6/HorizontalBar.js.map +1 -1
- package/lib/es6/Plot.js +18 -2
- package/lib/es6/Plot.js.map +1 -1
- package/lib/es6/RadialTree.js +679 -0
- package/lib/es6/RadialTree.js.map +1 -0
- package/lib/es6/ResponsiveContainer.js +2 -2
- package/lib/es6/ResponsiveContainer.js.map +1 -1
- package/lib/es6/StackBar.js +8 -8
- package/lib/es6/StackBar.js.map +1 -1
- package/lib/es6/StackedArea.js +8 -8
- package/lib/es6/StackedArea.js.map +1 -1
- package/lib/es6/Tooltip.js +6 -10
- package/lib/es6/Tooltip.js.map +1 -1
- package/lib/es6/Venn.js +2 -2
- package/lib/es6/Venn.js.map +1 -1
- package/lib/es6/createElement.js +3 -2
- package/lib/es6/createElement.js.map +1 -1
- package/lib/es6/index.js +1 -0
- package/lib/es6/index.js.map +1 -1
- package/lib/es6/style/axis.shadow.css +2 -4
- package/lib/es6/style/plot.shadow.css +6 -0
- package/lib/es6/style/radial-tree.shadow.css +23 -0
- package/lib/es6/types/Area.d.ts +47 -0
- package/lib/es6/types/Axis.d.ts +64 -0
- package/lib/es6/types/Bar.d.ts +48 -0
- package/lib/es6/types/Bubble.d.ts +27 -0
- package/lib/es6/types/ClipPath.d.ts +26 -0
- package/lib/es6/types/Donut.d.ts +42 -0
- package/lib/es6/types/GroupBar.d.ts +20 -0
- package/lib/es6/types/HorizontalBar.d.ts +29 -0
- package/lib/es6/types/Hover.d.ts +15 -0
- package/lib/es6/types/Line.d.ts +50 -0
- package/lib/es6/types/Plot.d.ts +16 -0
- package/lib/es6/types/ResponsiveContainer.d.ts +20 -0
- package/lib/es6/types/ScatterPlot.d.ts +27 -0
- package/lib/es6/types/StackBar.d.ts +26 -0
- package/lib/es6/types/StackedArea.d.ts +26 -0
- package/lib/es6/types/Tooltip.d.ts +31 -0
- package/lib/es6/types/Venn.d.ts +45 -0
- package/lib/es6/types/context.d.ts +6 -0
- package/lib/es6/types/index.d.ts +53 -0
- package/lib/es6/utils.js +95 -44
- package/lib/es6/utils.js.map +1 -1
- package/lib/types/RadialTree.d.ts +202 -0
- package/lib/types/index.d.ts +6 -0
- package/lib/types/utils.d.ts +27 -0
- package/package.json +17 -10
- package/src/Axis.jsx +11 -1
- package/src/Bubble.jsx +1 -21
- package/src/ClipPath.jsx +1 -0
- package/src/Donut.jsx +7 -9
- package/src/Plot.jsx +2 -0
- package/src/RadialTree.tsx +768 -0
- package/src/createElement.jsx +3 -1
- package/src/index.js +1 -0
- package/src/style/axis.shadow.css +2 -4
- package/src/style/plot.shadow.css +6 -0
- package/src/style/radial-tree.shadow.css +23 -0
- package/src/types/index.d.ts +6 -0
- package/src/utils.ts +227 -0
- package/src/utils.js +0 -147
package/lib/es6/utils.js
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
2
|
|
|
3
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
4
|
+
|
|
5
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
6
|
+
|
|
7
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
8
|
+
|
|
3
9
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
4
10
|
|
|
5
11
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
@@ -10,31 +16,31 @@ var CONSTANT = {
|
|
|
10
16
|
VIRTUAL_ELEMENT: Symbol('VIRTUAL_ELEMENT')
|
|
11
17
|
};
|
|
12
18
|
export { CONSTANT };
|
|
13
|
-
export function eventToPoint(event, svgRoot) {
|
|
19
|
+
export var eventToPoint = function eventToPoint(event, svgRoot) {
|
|
14
20
|
var node = event.currentTarget || event.target;
|
|
15
21
|
var rect = svgRoot.getBoundingClientRect();
|
|
16
22
|
return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];
|
|
17
|
-
}
|
|
18
|
-
export function invert(scale, value) {
|
|
23
|
+
};
|
|
24
|
+
export var invert = function invert(scale, value) {
|
|
19
25
|
if (scale.invert) return scale.invert(value);
|
|
20
26
|
var range = scale.range();
|
|
21
27
|
var domain = scale.domain();
|
|
22
28
|
return scaleQuantize().domain(range[0] <= range[1] ? range : range.slice().reverse()).range(range[0] <= range[1] ? domain : domain.slice().reverse())(value);
|
|
23
|
-
}
|
|
24
|
-
export function definedNullData(x, y) {
|
|
25
|
-
return function (
|
|
26
|
-
return
|
|
29
|
+
};
|
|
30
|
+
export var definedNullData = function definedNullData(x, y) {
|
|
31
|
+
return function (plot) {
|
|
32
|
+
return plot[x] !== null && plot[y] !== null;
|
|
27
33
|
};
|
|
28
|
-
}
|
|
29
|
-
export function definedData(x, y) {
|
|
30
|
-
return function (
|
|
31
|
-
return
|
|
34
|
+
};
|
|
35
|
+
export var definedData = function definedData(x, y) {
|
|
36
|
+
return function (plot) {
|
|
37
|
+
return plot[x] !== null && plot[x] !== undefined && plot[y] !== null && plot[y] !== undefined;
|
|
32
38
|
};
|
|
33
|
-
}
|
|
34
|
-
export function scaleOfBandwidth(scale, value) {
|
|
39
|
+
};
|
|
40
|
+
export var scaleOfBandwidth = function scaleOfBandwidth(scale, value) {
|
|
35
41
|
return scale.bandwidth ? scale(value) + scale.bandwidth() / 2 : scale(value);
|
|
36
|
-
}
|
|
37
|
-
export function minMax(data, key) {
|
|
42
|
+
};
|
|
43
|
+
export var minMax = function minMax(data, key) {
|
|
38
44
|
if (typeof key === 'string') {
|
|
39
45
|
return extent(data, function (d) {
|
|
40
46
|
return d[key];
|
|
@@ -42,8 +48,8 @@ export function minMax(data, key) {
|
|
|
42
48
|
}
|
|
43
49
|
|
|
44
50
|
return extent(data, key);
|
|
45
|
-
}
|
|
46
|
-
export function getNullData(data, defined, name) {
|
|
51
|
+
};
|
|
52
|
+
export var getNullData = function getNullData(data, defined, name) {
|
|
47
53
|
return data.reduce(function (acc, d, i, data) {
|
|
48
54
|
if (defined(d)) {
|
|
49
55
|
acc.push(_defineProperty({}, name, null));
|
|
@@ -74,8 +80,8 @@ export function getNullData(data, defined, name) {
|
|
|
74
80
|
|
|
75
81
|
return acc;
|
|
76
82
|
}, []);
|
|
77
|
-
}
|
|
78
|
-
export function getIndexFromData(data, scale, key, value) {
|
|
83
|
+
};
|
|
84
|
+
export var getIndexFromData = function getIndexFromData(data, scale, key, value) {
|
|
79
85
|
// detect line chart
|
|
80
86
|
if ('invert' in scale && typeof scale.invert === 'function') {
|
|
81
87
|
var bisect = bisector(function (d) {
|
|
@@ -89,57 +95,57 @@ export function getIndexFromData(data, scale, key, value) {
|
|
|
89
95
|
});
|
|
90
96
|
return index >= 0 ? index : null;
|
|
91
97
|
} else {
|
|
98
|
+
// eslint-disable-next-line no-console
|
|
92
99
|
console.warn('[d3-chart/utils/getIndexFromData] encountered incompatible scale type');
|
|
93
100
|
return null;
|
|
94
101
|
}
|
|
95
|
-
}
|
|
96
|
-
export function roundedPath(x, y, w, h, r) {
|
|
102
|
+
};
|
|
103
|
+
export var roundedPath = function roundedPath(x, y, w, h, r) {
|
|
97
104
|
var tl = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;
|
|
98
105
|
var tr = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : false;
|
|
99
106
|
var bl = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : false;
|
|
100
107
|
var br = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : false;
|
|
101
|
-
var
|
|
102
|
-
|
|
103
|
-
retval += 'h' + (w - 2 * r);
|
|
108
|
+
var result = 'M' + (x + r) + ',' + y;
|
|
109
|
+
result += 'h' + (w - 2 * r);
|
|
104
110
|
|
|
105
111
|
if (tr) {
|
|
106
|
-
|
|
112
|
+
result += 'a' + r + ',' + r + ' 0 0 1 ' + r + ',' + r;
|
|
107
113
|
} else {
|
|
108
|
-
|
|
109
|
-
|
|
114
|
+
result += 'h' + r;
|
|
115
|
+
result += 'v' + r;
|
|
110
116
|
}
|
|
111
117
|
|
|
112
|
-
|
|
118
|
+
result += 'v' + (h - 2 * r);
|
|
113
119
|
|
|
114
120
|
if (br) {
|
|
115
|
-
|
|
121
|
+
result += 'a' + r + ',' + r + ' 0 0 1 ' + -r + ',' + r;
|
|
116
122
|
} else {
|
|
117
|
-
|
|
118
|
-
|
|
123
|
+
result += 'v' + r;
|
|
124
|
+
result += 'h' + -r;
|
|
119
125
|
}
|
|
120
126
|
|
|
121
|
-
|
|
127
|
+
result += 'h' + (2 * r - w);
|
|
122
128
|
|
|
123
129
|
if (bl) {
|
|
124
|
-
|
|
130
|
+
result += 'a' + r + ',' + r + ' 0 0 1 ' + -r + ',' + -r;
|
|
125
131
|
} else {
|
|
126
|
-
|
|
127
|
-
|
|
132
|
+
result += 'h' + -r;
|
|
133
|
+
result += 'v' + -r;
|
|
128
134
|
}
|
|
129
135
|
|
|
130
|
-
|
|
136
|
+
result += 'v' + (2 * r - h);
|
|
131
137
|
|
|
132
138
|
if (tl) {
|
|
133
|
-
|
|
139
|
+
result += 'a' + r + ',' + r + ' 0 0 1 ' + r + ',' + -r;
|
|
134
140
|
} else {
|
|
135
|
-
|
|
136
|
-
|
|
141
|
+
result += 'v' + -r;
|
|
142
|
+
result += 'h' + r;
|
|
137
143
|
}
|
|
138
144
|
|
|
139
|
-
|
|
140
|
-
return
|
|
141
|
-
}
|
|
142
|
-
export function getBandwidth(scale) {
|
|
145
|
+
result += 'z';
|
|
146
|
+
return result;
|
|
147
|
+
};
|
|
148
|
+
export var getBandwidth = function getBandwidth(scale) {
|
|
143
149
|
if ('bandwidth' in scale) {
|
|
144
150
|
return scale.bandwidth();
|
|
145
151
|
}
|
|
@@ -147,5 +153,50 @@ export function getBandwidth(scale) {
|
|
|
147
153
|
var range = scale.range();
|
|
148
154
|
var domain = scale.domain();
|
|
149
155
|
return Math.abs(range[range.length - 1] - range[0]) / domain.length;
|
|
150
|
-
}
|
|
156
|
+
};
|
|
157
|
+
export var memoize = function memoize(func) {
|
|
158
|
+
var results = {};
|
|
159
|
+
return function () {
|
|
160
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
161
|
+
args[_key] = arguments[_key];
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
var argsKey = args.join(',');
|
|
165
|
+
|
|
166
|
+
if (!results[argsKey]) {
|
|
167
|
+
results[argsKey] = func.apply(void 0, args);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
return results[argsKey];
|
|
171
|
+
};
|
|
172
|
+
};
|
|
173
|
+
export var measureText = memoize(function (text, fontSize) {
|
|
174
|
+
if (!text) return 0;
|
|
175
|
+
var span = document.createElement('span');
|
|
176
|
+
|
|
177
|
+
if (fontSize) {
|
|
178
|
+
span.style.fontSize = "".concat(fontSize, "px");
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
var _iterator = _createForOfIteratorHelper(text.split('\n')),
|
|
182
|
+
_step;
|
|
183
|
+
|
|
184
|
+
try {
|
|
185
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
186
|
+
var line = _step.value;
|
|
187
|
+
span.append(document.createTextNode(line));
|
|
188
|
+
span.append(document.createElement('br'));
|
|
189
|
+
}
|
|
190
|
+
} catch (err) {
|
|
191
|
+
_iterator.e(err);
|
|
192
|
+
} finally {
|
|
193
|
+
_iterator.f();
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
span.style.display = 'inline-block';
|
|
197
|
+
document.body.append(span);
|
|
198
|
+
var textWidth = span.offsetWidth;
|
|
199
|
+
span.remove();
|
|
200
|
+
return textWidth;
|
|
201
|
+
});
|
|
151
202
|
//# sourceMappingURL=utils.js.map
|
package/lib/es6/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils.js"],"names":["extent","bisector","scaleQuantize","CONSTANT","VIRTUAL_ELEMENT","Symbol","eventToPoint","event","svgRoot","node","currentTarget","target","rect","getBoundingClientRect","clientX","left","clientLeft","clientY","top","clientTop","invert","scale","value","range","domain","slice","reverse","definedNullData","x","y","p","definedData","undefined","scaleOfBandwidth","bandwidth","minMax","data","key","d","getNullData","defined","name","reduce","acc","i","push","prev","next","defNext","find","length","defPrev","getIndexFromData","bisect","center","step","index","findIndex","console","warn","roundedPath","w","h","r","tl","tr","bl","br","retval","getBandwidth","Math","abs"],"mappings":";;;;;;AAAA,SAASA,MAAT,EAAiBC,QAAjB,QAAiC,UAAjC;AACA,SAASC,aAAT,QAA8B,UAA9B;AAEA,IAAMC,QAAQ,GAAG;AACfC,EAAAA,eAAe,EAAEC,MAAM,CAAC,iBAAD;AADR,CAAjB;AAIA,SAASF,QAAT;AAEA,OAAO,SAASG,YAAT,CAAsBC,KAAtB,EAA6BC,OAA7B,EAAsC;AAC3C,MAAMC,IAAI,GAAGF,KAAK,CAACG,aAAN,IAAuBH,KAAK,CAACI,MAA1C;AACA,MAAMC,IAAI,GAAGJ,OAAO,CAACK,qBAAR,EAAb;AACA,SAAO,CAACN,KAAK,CAACO,OAAN,GAAgBF,IAAI,CAACG,IAArB,GAA4BN,IAAI,CAACO,UAAlC,EAA8CT,KAAK,CAACU,OAAN,GAAgBL,IAAI,CAACM,GAArB,GAA2BT,IAAI,CAACU,SAA9E,CAAP;AACD;AAED,OAAO,SAASC,MAAT,CAAgBC,KAAhB,EAAuBC,KAAvB,EAA8B;AACnC,MAAID,KAAK,CAACD,MAAV,EAAkB,OAAOC,KAAK,CAACD,MAAN,CAAaE,KAAb,CAAP;AAElB,MAAMC,KAAK,GAAGF,KAAK,CAACE,KAAN,EAAd;AACA,MAAMC,MAAM,GAAGH,KAAK,CAACG,MAAN,EAAf;AAEA,SAAOtB,aAAa,GACjBsB,MADI,CACGD,KAAK,CAAC,CAAD,CAAL,IAAYA,KAAK,CAAC,CAAD,CAAjB,GAAuBA,KAAvB,GAA+BA,KAAK,CAACE,KAAN,GAAcC,OAAd,EADlC,EAEJH,KAFI,CAEEA,KAAK,CAAC,CAAD,CAAL,IAAYA,KAAK,CAAC,CAAD,CAAjB,GAAuBC,MAAvB,GAAgCA,MAAM,CAACC,KAAP,GAAeC,OAAf,EAFlC,EAE4DJ,KAF5D,CAAP;AAGD;AAED,OAAO,SAASK,eAAT,CAAyBC,CAAzB,EAA4BC,CAA5B,EAA+B;AACpC,SAAO,UAACC,CAAD;AAAA,WAAOA,CAAC,CAACF,CAAD,CAAD,KAAS,IAAT,IAAiBE,CAAC,CAACD,CAAD,CAAD,KAAS,IAAjC;AAAA,GAAP;AACD;AAED,OAAO,SAASE,WAAT,CAAqBH,CAArB,EAAwBC,CAAxB,EAA2B;AAChC,SAAO,UAACC,CAAD,EAAO;AACZ,WAAOA,CAAC,CAACF,CAAD,CAAD,KAAS,IAAT,IAAiBE,CAAC,CAACF,CAAD,CAAD,KAASI,SAA1B,IAAuCF,CAAC,CAACD,CAAD,CAAD,KAAS,IAAhD,IAAwDC,CAAC,CAACD,CAAD,CAAD,KAASG,SAAxE;AACD,GAFD;AAGD;AAED,OAAO,SAASC,gBAAT,CAA0BZ,KAA1B,EAAiCC,KAAjC,EAAwC;AAC7C,SAAOD,KAAK,CAACa,SAAN,GAAkBb,KAAK,CAACC,KAAD,CAAL,GAAeD,KAAK,CAACa,SAAN,KAAoB,CAArD,GAAyDb,KAAK,CAACC,KAAD,CAArE;AACD;AAED,OAAO,SAASa,MAAT,CAAgBC,IAAhB,EAAsBC,GAAtB,EAA2B;AAChC,MAAI,OAAOA,GAAP,KAAe,QAAnB,EAA6B;AAC3B,WAAOrC,MAAM,CAACoC,IAAD,EAAO,UAACE,CAAD;AAAA,aAAOA,CAAC,CAACD,GAAD,CAAR;AAAA,KAAP,CAAb;AACD;;AACD,SAAOrC,MAAM,CAACoC,IAAD,EAAOC,GAAP,CAAb;AACD;AAED,OAAO,SAASE,WAAT,CAAqBH,IAArB,EAA2BI,OAA3B,EAAoCC,IAApC,EAA0C;AAC/C,SAAOL,IAAI,CAACM,MAAL,CAAY,UAACC,GAAD,EAAML,CAAN,EAASM,CAAT,EAAYR,IAAZ,EAAqB;AACtC,QAAII,OAAO,CAACF,CAAD,CAAX,EAAgB;AACdK,MAAAA,GAAG,CAACE,IAAJ,qBACGJ,IADH,EACU,IADV;AAGD,KAJD,MAIO;AACL,UAAMK,IAAI,GAAGV,IAAI,CAACQ,CAAC,GAAG,CAAL,CAAjB;AACA,UAAMG,IAAI,GAAGX,IAAI,CAACQ,CAAC,GAAG,CAAL,CAAjB;;AAEA,UAAIA,CAAC,KAAK,CAAV,EAAa;AACX,YAAMI,OAAO,GAAGZ,IAAI,CAACa,IAAL,CAAUT,OAAV,CAAhB;AACAG,QAAAA,GAAG,CAACE,IAAJ,iCACKP,CADL,2BAEGG,IAFH,EAEUO,OAAO,GAAGA,OAAO,CAACP,IAAD,CAAV,GAAmB,IAFpC;AAID,OAVI,CAYL;;;AACA,UAAIK,IAAI,IAAIN,OAAO,CAACM,IAAD,CAAnB,EAA2B;AACzBH,QAAAA,GAAG,CAACE,IAAJ,CAASC,IAAT;AACD,OAfI,CAiBL;;;AACA,UAAIC,IAAI,IAAIP,OAAO,CAACO,IAAD,CAAnB,EAA2B;AACzBJ,QAAAA,GAAG,CAACE,IAAJ,CAASE,IAAT;AACD;;AAED,UAAIX,IAAI,CAACc,MAAL,GAAc,CAAd,KAAoBN,CAAxB,EAA2B;AACzB,YAAMO,OAAO,GAAGf,IAAI,CAACX,KAAL,GAAaC,OAAb,GAAuBuB,IAAvB,CAA4BT,OAA5B,CAAhB;AACAG,QAAAA,GAAG,CAACE,IAAJ,iCACKP,CADL,2BAEGG,IAFH,EAEUU,OAAO,GAAGA,OAAO,CAACV,IAAD,CAAV,GAAmB,IAFpC;AAID;AACF;;AACD,WAAOE,GAAP;AACD,GApCM,EAoCJ,EApCI,CAAP;AAqCD;AAED,OAAO,SAASS,gBAAT,CAA0BhB,IAA1B,EAAgCf,KAAhC,EAAuCgB,GAAvC,EAA4Cf,KAA5C,EAAmD;AACxD;AACA,MAAI,YAAYD,KAAZ,IAAqB,OAAOA,KAAK,CAACD,MAAb,KAAwB,UAAjD,EAA6D;AAC3D,QAAMiC,MAAM,GAAGpD,QAAQ,CAAC,UAACqC,CAAD;AAAA,aAAOA,CAAC,CAACD,GAAD,CAAR;AAAA,KAAD,CAAR,CAAwBiB,MAAvC;AACA,WAAOD,MAAM,CAACjB,IAAD,EAAOd,KAAP,CAAb;AACD,GAHD,CAIA;AAJA,OAKK,IAAI,UAAUD,KAAV,IAAmB,OAAOA,KAAK,CAACkC,IAAb,KAAsB,WAA7C,EAA0D;AAC7D,QAAMC,KAAK,GAAGpB,IAAI,CAACqB,SAAL,CAAe,UAACnB,CAAD;AAAA,aAAOA,CAAC,CAACD,GAAD,CAAD,KAAWf,KAAlB;AAAA,KAAf,CAAd;AACA,WAAOkC,KAAK,IAAI,CAAT,GAAaA,KAAb,GAAqB,IAA5B;AACD,GAHI,MAGE;AACLE,IAAAA,OAAO,CAACC,IAAR,CAAa,uEAAb;AACA,WAAO,IAAP;AACD;AACF;AAED,OAAO,SAASC,WAAT,CAAqBhC,CAArB,EAAwBC,CAAxB,EAA2BgC,CAA3B,EAA8BC,CAA9B,EAAiCC,CAAjC,EAAoF;AAAA,MAAhDC,EAAgD,uEAA3C,KAA2C;AAAA,MAApCC,EAAoC,uEAA/B,KAA+B;AAAA,MAAxBC,EAAwB,uEAAnB,KAAmB;AAAA,MAAZC,EAAY,uEAAP,KAAO;AACzF,MAAIC,MAAJ;AACAA,EAAAA,MAAM,GAAG,OAAOxC,CAAC,GAAGmC,CAAX,IAAgB,GAAhB,GAAsBlC,CAA/B;AACAuC,EAAAA,MAAM,IAAI,OAAOP,CAAC,GAAG,IAAIE,CAAf,CAAV;;AACA,MAAIE,EAAJ,EAAQ;AACNG,IAAAA,MAAM,IAAI,MAAML,CAAN,GAAU,GAAV,GAAgBA,CAAhB,GAAoB,SAApB,GAAgCA,CAAhC,GAAoC,GAApC,GAA0CA,CAApD;AACD,GAFD,MAEO;AACLK,IAAAA,MAAM,IAAI,MAAML,CAAhB;AACAK,IAAAA,MAAM,IAAI,MAAML,CAAhB;AACD;;AACDK,EAAAA,MAAM,IAAI,OAAON,CAAC,GAAG,IAAIC,CAAf,CAAV;;AACA,MAAII,EAAJ,EAAQ;AACNC,IAAAA,MAAM,IAAI,MAAML,CAAN,GAAU,GAAV,GAAgBA,CAAhB,GAAoB,SAApB,GAAgC,CAACA,CAAjC,GAAqC,GAArC,GAA2CA,CAArD;AACD,GAFD,MAEO;AACLK,IAAAA,MAAM,IAAI,MAAML,CAAhB;AACAK,IAAAA,MAAM,IAAI,MAAM,CAACL,CAAjB;AACD;;AACDK,EAAAA,MAAM,IAAI,OAAO,IAAIL,CAAJ,GAAQF,CAAf,CAAV;;AACA,MAAIK,EAAJ,EAAQ;AACNE,IAAAA,MAAM,IAAI,MAAML,CAAN,GAAU,GAAV,GAAgBA,CAAhB,GAAoB,SAApB,GAAgC,CAACA,CAAjC,GAAqC,GAArC,GAA2C,CAACA,CAAtD;AACD,GAFD,MAEO;AACLK,IAAAA,MAAM,IAAI,MAAM,CAACL,CAAjB;AACAK,IAAAA,MAAM,IAAI,MAAM,CAACL,CAAjB;AACD;;AACDK,EAAAA,MAAM,IAAI,OAAO,IAAIL,CAAJ,GAAQD,CAAf,CAAV;;AACA,MAAIE,EAAJ,EAAQ;AACNI,IAAAA,MAAM,IAAI,MAAML,CAAN,GAAU,GAAV,GAAgBA,CAAhB,GAAoB,SAApB,GAAgCA,CAAhC,GAAoC,GAApC,GAA0C,CAACA,CAArD;AACD,GAFD,MAEO;AACLK,IAAAA,MAAM,IAAI,MAAM,CAACL,CAAjB;AACAK,IAAAA,MAAM,IAAI,MAAML,CAAhB;AACD;;AACDK,EAAAA,MAAM,IAAI,GAAV;AACA,SAAOA,MAAP;AACD;AAED,OAAO,SAASC,YAAT,CAAsBhD,KAAtB,EAA6B;AAClC,MAAI,eAAeA,KAAnB,EAA0B;AACxB,WAAOA,KAAK,CAACa,SAAN,EAAP;AACD;;AAED,MAAMX,KAAK,GAAGF,KAAK,CAACE,KAAN,EAAd;AACA,MAAMC,MAAM,GAAGH,KAAK,CAACG,MAAN,EAAf;AACA,SAAO8C,IAAI,CAACC,GAAL,CAAShD,KAAK,CAACA,KAAK,CAAC2B,MAAN,GAAe,CAAhB,CAAL,GAA0B3B,KAAK,CAAC,CAAD,CAAxC,IAA+CC,MAAM,CAAC0B,MAA7D;AACD","sourcesContent":["import { extent, bisector } from 'd3-array';\nimport { scaleQuantize } from 'd3-scale';\n\nconst CONSTANT = {\n VIRTUAL_ELEMENT: Symbol('VIRTUAL_ELEMENT'),\n};\n\nexport { CONSTANT };\n\nexport function eventToPoint(event, svgRoot) {\n const node = event.currentTarget || event.target;\n const rect = svgRoot.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n\nexport function invert(scale, value) {\n if (scale.invert) return scale.invert(value);\n\n const range = scale.range();\n const domain = scale.domain();\n\n return scaleQuantize()\n .domain(range[0] <= range[1] ? range : range.slice().reverse())\n .range(range[0] <= range[1] ? domain : domain.slice().reverse())(value);\n}\n\nexport function definedNullData(x, y) {\n return (p) => p[x] !== null && p[y] !== null;\n}\n\nexport function definedData(x, y) {\n return (p) => {\n return p[x] !== null && p[x] !== undefined && p[y] !== null && p[y] !== undefined;\n };\n}\n\nexport function scaleOfBandwidth(scale, value) {\n return scale.bandwidth ? scale(value) + scale.bandwidth() / 2 : scale(value);\n}\n\nexport function minMax(data, key) {\n if (typeof key === 'string') {\n return extent(data, (d) => d[key]);\n }\n return extent(data, key);\n}\n\nexport function getNullData(data, defined, name) {\n return data.reduce((acc, d, i, data) => {\n if (defined(d)) {\n acc.push({\n [name]: null,\n });\n } else {\n const prev = data[i - 1];\n const next = data[i + 1];\n\n if (i === 0) {\n const defNext = data.find(defined);\n acc.push({\n ...d,\n [name]: defNext ? defNext[name] : null,\n });\n }\n\n // prev\n if (prev && defined(prev)) {\n acc.push(prev);\n }\n\n // next\n if (next && defined(next)) {\n acc.push(next);\n }\n\n if (data.length - 1 === i) {\n const defPrev = data.slice().reverse().find(defined);\n acc.push({\n ...d,\n [name]: defPrev ? defPrev[name] : null,\n });\n }\n }\n return acc;\n }, []);\n}\n\nexport function getIndexFromData(data, scale, key, value) {\n // detect line chart\n if ('invert' in scale && typeof scale.invert === 'function') {\n const bisect = bisector((d) => d[key]).center;\n return bisect(data, value);\n }\n // detect bar chart\n else if ('step' in scale && typeof scale.step !== 'undefined') {\n const index = data.findIndex((d) => d[key] === value);\n return index >= 0 ? index : null;\n } else {\n console.warn('[d3-chart/utils/getIndexFromData] encountered incompatible scale type');\n return null;\n }\n}\n\nexport function roundedPath(x, y, w, h, r, tl = false, tr = false, bl = false, br = false) {\n let retval;\n retval = 'M' + (x + r) + ',' + y;\n retval += 'h' + (w - 2 * r);\n if (tr) {\n retval += 'a' + r + ',' + r + ' 0 0 1 ' + r + ',' + r;\n } else {\n retval += 'h' + r;\n retval += 'v' + r;\n }\n retval += 'v' + (h - 2 * r);\n if (br) {\n retval += 'a' + r + ',' + r + ' 0 0 1 ' + -r + ',' + r;\n } else {\n retval += 'v' + r;\n retval += 'h' + -r;\n }\n retval += 'h' + (2 * r - w);\n if (bl) {\n retval += 'a' + r + ',' + r + ' 0 0 1 ' + -r + ',' + -r;\n } else {\n retval += 'h' + -r;\n retval += 'v' + -r;\n }\n retval += 'v' + (2 * r - h);\n if (tl) {\n retval += 'a' + r + ',' + r + ' 0 0 1 ' + r + ',' + -r;\n } else {\n retval += 'v' + -r;\n retval += 'h' + r;\n }\n retval += 'z';\n return retval;\n}\n\nexport function getBandwidth(scale) {\n if ('bandwidth' in scale) {\n return scale.bandwidth();\n }\n\n const range = scale.range();\n const domain = scale.domain();\n return Math.abs(range[range.length - 1] - range[0]) / domain.length;\n}\n"],"file":"utils.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/utils.ts"],"names":["extent","bisector","scaleQuantize","CONSTANT","VIRTUAL_ELEMENT","Symbol","eventToPoint","event","svgRoot","node","currentTarget","target","rect","getBoundingClientRect","clientX","left","clientLeft","clientY","top","clientTop","invert","scale","value","range","domain","slice","reverse","definedNullData","x","y","plot","definedData","undefined","scaleOfBandwidth","bandwidth","minMax","data","key","d","getNullData","defined","name","reduce","acc","i","push","prev","next","defNext","find","length","defPrev","getIndexFromData","bisect","center","step","index","findIndex","console","warn","roundedPath","w","h","r","tl","tr","bl","br","result","getBandwidth","Math","abs","memoize","func","results","args","argsKey","join","measureText","text","fontSize","span","document","createElement","style","split","line","append","createTextNode","display","body","textWidth","offsetWidth","remove"],"mappings":"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","sourcesContent":["import { extent, bisector, Numeric } from 'd3-array';\nimport {\n scaleQuantize,\n ScaleIdentity,\n ScaleTime,\n ScaleContinuousNumeric,\n ScaleBand,\n ScalePoint,\n NumberValue,\n} from 'd3-scale';\nimport React from 'react';\n\nconst CONSTANT = {\n VIRTUAL_ELEMENT: Symbol('VIRTUAL_ELEMENT'),\n} as const;\n\nexport { CONSTANT };\n\nexport const eventToPoint = (event: React.MouseEvent<HTMLElement>, svgRoot: SVGElement) => {\n const node = (event.currentTarget || event.target) as HTMLElement;\n const rect = svgRoot.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n};\n\ntype InvertableScale =\n | ScaleIdentity\n | ScaleTime<unknown, unknown>\n | ScaleContinuousNumeric<unknown, unknown>;\nexport const invert = <Scale extends InvertableScale = InvertableScale>(\n scale: Scale,\n value: number,\n) => {\n if (scale.invert) return scale.invert(value);\n\n const range = scale.range() as number[];\n const domain = scale.domain();\n\n return scaleQuantize()\n .domain((range[0] <= range[1] ? range : range.slice().reverse()) as NumberValue[])\n .range((range[0] <= range[1] ? domain : domain.slice().reverse()) as number[])(value);\n};\n\nexport const definedNullData = (x: number, y: number) => (plot: { [xOrY: number]: unknown }) =>\n plot[x] !== null && plot[y] !== null;\n\nexport const definedData = (x: number, y: number) => (plot: { [xOrY: number]: unknown }) =>\n plot[x] !== null && plot[x] !== undefined && plot[y] !== null && plot[y] !== undefined;\n\nexport const scaleOfBandwidth = <Scale extends ScaleBand<{}>>(scale: Scale, value: number) =>\n scale.bandwidth ? scale(value)! + scale.bandwidth() / 2 : scale(value);\n\nexport const minMax = <\n Key extends string = string,\n Data extends Iterable<{ [key in Key]: Numeric | null | undefined }> = Iterable<{\n [key in Key]: Numeric | null | undefined;\n }>,\n>(\n data: Data,\n key: Key,\n) => {\n if (typeof key === 'string') {\n return extent(data, (d) => d[key]);\n }\n return extent(data, key);\n};\n\nexport const getNullData = <\n Name extends string = string,\n Data extends { [name in Name]?: unknown | null } = {},\n>(\n data: Data[],\n defined: (data: Data) => boolean,\n name: Name,\n) =>\n data.reduce((acc, d, i, data) => {\n if (defined(d)) {\n acc.push({\n [name]: null,\n } as Data);\n } else {\n const prev = data[i - 1];\n const next = data[i + 1];\n\n if (i === 0) {\n const defNext = data.find(defined);\n acc.push({\n ...d,\n [name]: defNext ? defNext[name] : null,\n });\n }\n\n // prev\n if (prev && defined(prev)) {\n acc.push(prev);\n }\n\n // next\n if (next && defined(next)) {\n acc.push(next);\n }\n\n if (data.length - 1 === i) {\n const defPrev = data.slice().reverse().find(defined);\n acc.push({\n ...d,\n [name]: defPrev ? defPrev[name] : null,\n });\n }\n }\n return acc;\n }, [] as Data[]);\n\ntype IndexFromDataScale =\n | ScaleIdentity\n | ScaleTime<unknown, unknown>\n | ScaleContinuousNumeric<unknown, unknown>\n | ScaleBand<{}>\n | ScalePoint<{}>;\nexport const getIndexFromData = <\n Data extends {\n [key: string]: number;\n } = {},\n Scale extends IndexFromDataScale = IndexFromDataScale,\n>(\n data: Data[],\n scale: Scale,\n key: string,\n value: number,\n) => {\n // detect line chart\n if ('invert' in scale && typeof scale.invert === 'function') {\n const bisect = bisector((d: { [key: string]: number }) => d[key]).center;\n return bisect(data, value);\n }\n // detect bar chart\n else if ('step' in scale && typeof scale.step !== 'undefined') {\n const index = data.findIndex((d) => d[key] === value);\n return index >= 0 ? index : null;\n } else {\n // eslint-disable-next-line no-console\n console.warn('[d3-chart/utils/getIndexFromData] encountered incompatible scale type');\n return null;\n }\n};\n\nexport const roundedPath = (\n x: number,\n y: number,\n w: number,\n h: number,\n r: number,\n tl = false,\n tr = false,\n bl = false,\n br = false,\n) => {\n let result = 'M' + (x + r) + ',' + y;\n result += 'h' + (w - 2 * r);\n if (tr) {\n result += 'a' + r + ',' + r + ' 0 0 1 ' + r + ',' + r;\n } else {\n result += 'h' + r;\n result += 'v' + r;\n }\n result += 'v' + (h - 2 * r);\n if (br) {\n result += 'a' + r + ',' + r + ' 0 0 1 ' + -r + ',' + r;\n } else {\n result += 'v' + r;\n result += 'h' + -r;\n }\n result += 'h' + (2 * r - w);\n if (bl) {\n result += 'a' + r + ',' + r + ' 0 0 1 ' + -r + ',' + -r;\n } else {\n result += 'h' + -r;\n result += 'v' + -r;\n }\n result += 'v' + (2 * r - h);\n if (tl) {\n result += 'a' + r + ',' + r + ' 0 0 1 ' + r + ',' + -r;\n } else {\n result += 'v' + -r;\n result += 'h' + r;\n }\n result += 'z';\n return result;\n};\n\nexport const getBandwidth = <Scale extends ScaleBand<{}>>(scale: Scale) => {\n if ('bandwidth' in scale) {\n return scale.bandwidth();\n }\n\n const range = scale.range();\n const domain = scale.domain();\n return Math.abs(range[range.length - 1] - range[0]) / domain.length;\n};\n\nexport const memoize = <Func extends (...args: any[]) => any>(func: Func): Func => {\n const results: { [cacheKey: string]: any } = {};\n return ((...args: any[]) => {\n const argsKey = args.join(',');\n if (!results[argsKey]) {\n results[argsKey] = func(...args);\n }\n return results[argsKey];\n }) as Func;\n};\n\nexport const measureText = memoize((text: string, fontSize?: number) => {\n if (!text) return 0;\n\n const span = document.createElement('span');\n if (fontSize) {\n span.style.fontSize = `${fontSize}px`;\n }\n for (const line of text.split('\\n')) {\n span.append(document.createTextNode(line));\n span.append(document.createElement('br'));\n }\n span.style.display = 'inline-block';\n document.body.append(span);\n const textWidth = span.offsetWidth;\n span.remove();\n return textWidth;\n});\n"],"file":"utils.js"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { CProps, ReturnEl } from '@semcore/core';
|
|
3
|
+
declare type RadianData = {
|
|
4
|
+
/**
|
|
5
|
+
* Text label on the end of radian.
|
|
6
|
+
*/
|
|
7
|
+
label: string;
|
|
8
|
+
/**
|
|
9
|
+
* Radian key. Radian, which `key` is equal to `activeKey` is displayed as active.
|
|
10
|
+
*/
|
|
11
|
+
key: string;
|
|
12
|
+
/**
|
|
13
|
+
* Size of the cap (filled circle on the end of the radian).
|
|
14
|
+
* @default 16
|
|
15
|
+
*/
|
|
16
|
+
capSize?: number;
|
|
17
|
+
/**
|
|
18
|
+
* Icon, that displayed in the cap of the active radian (usage example `icon: UserM`).
|
|
19
|
+
*/
|
|
20
|
+
icon?: React.FC;
|
|
21
|
+
/**
|
|
22
|
+
* Color of radian's line, cap and label.
|
|
23
|
+
* @default #008FF8
|
|
24
|
+
*/
|
|
25
|
+
color?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Color of icon.
|
|
28
|
+
* @default #fff
|
|
29
|
+
*/
|
|
30
|
+
iconColor?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Size of icon.
|
|
33
|
+
* @default 16
|
|
34
|
+
*/
|
|
35
|
+
iconSize?: number;
|
|
36
|
+
};
|
|
37
|
+
export interface IRadialTreeProps {
|
|
38
|
+
/**
|
|
39
|
+
* List of radians. `{ label: string; key: string; capSize?: number; icon?: React.FC; color?: string; iconColor?: string; iconSize?: number; }`
|
|
40
|
+
*/
|
|
41
|
+
data: RadianData[];
|
|
42
|
+
/**
|
|
43
|
+
* Angel (in rads) that rotates chart. 0 means that first radian is exactly on top vertical line.
|
|
44
|
+
* @default 0
|
|
45
|
+
*/
|
|
46
|
+
angleOffset?: number;
|
|
47
|
+
/**
|
|
48
|
+
* Duration of appear and update animation.
|
|
49
|
+
* @default 300
|
|
50
|
+
*/
|
|
51
|
+
duration?: number;
|
|
52
|
+
/**
|
|
53
|
+
* Gap between the chart center and radians start point.
|
|
54
|
+
* @default 50
|
|
55
|
+
*/
|
|
56
|
+
centralMargin?: number;
|
|
57
|
+
/**
|
|
58
|
+
* Gap around text label.
|
|
59
|
+
* @default 2
|
|
60
|
+
*/
|
|
61
|
+
labelMargin?: number;
|
|
62
|
+
/**
|
|
63
|
+
* Color of all radian's line, cap and label.
|
|
64
|
+
* @default #008FF8
|
|
65
|
+
*/
|
|
66
|
+
color?: string;
|
|
67
|
+
/**
|
|
68
|
+
* Size of the cap (filled circle on the end of the radian).
|
|
69
|
+
* @default 16
|
|
70
|
+
*/
|
|
71
|
+
capSize?: number;
|
|
72
|
+
/**
|
|
73
|
+
* Icon, that displayed in the cap of the active radian (usage example `icon: UserM`).
|
|
74
|
+
*/
|
|
75
|
+
icon?: React.FC;
|
|
76
|
+
/**
|
|
77
|
+
* Color of icon.
|
|
78
|
+
* @default #fff
|
|
79
|
+
*/
|
|
80
|
+
iconColor?: string;
|
|
81
|
+
/**
|
|
82
|
+
* Size of icon.
|
|
83
|
+
* @default 16
|
|
84
|
+
*/
|
|
85
|
+
iconSize?: number;
|
|
86
|
+
/**
|
|
87
|
+
* Text size in radians' labels. 1.5x is used as default text size of center text.
|
|
88
|
+
* @default 14
|
|
89
|
+
*/
|
|
90
|
+
textSize?: number;
|
|
91
|
+
/**
|
|
92
|
+
* Used to define the active radian in controlled way. Active radian is highligted with inreased cap size.
|
|
93
|
+
*/
|
|
94
|
+
activeKey?: string | null;
|
|
95
|
+
/**
|
|
96
|
+
* Default value for `activeKey` property.
|
|
97
|
+
*/
|
|
98
|
+
defaultActiveKey?: string | null;
|
|
99
|
+
}
|
|
100
|
+
export interface IRadialTreeRadianProps extends IRadialTreeProps {
|
|
101
|
+
radiansCount?: number;
|
|
102
|
+
textWidth?: number;
|
|
103
|
+
onRadianClick?: (key: string) => (event: React.MouseEvent) => void;
|
|
104
|
+
}
|
|
105
|
+
export interface IRadialTreeRadianInteractiveAreaProps {
|
|
106
|
+
x1?: number;
|
|
107
|
+
y1?: number;
|
|
108
|
+
x2?: number;
|
|
109
|
+
y2?: number;
|
|
110
|
+
strokeWidth?: number;
|
|
111
|
+
}
|
|
112
|
+
export interface IRadialTreeRadianLineProps {
|
|
113
|
+
x1?: number;
|
|
114
|
+
y1?: number;
|
|
115
|
+
x2?: number;
|
|
116
|
+
y2?: number;
|
|
117
|
+
stroke?: string;
|
|
118
|
+
['data-radial-animation']?: `${string}-line`;
|
|
119
|
+
['data-radian-index']?: number;
|
|
120
|
+
}
|
|
121
|
+
declare type RadialTreeRadianLineAsProps = IRadialTreeRadianLineProps & {
|
|
122
|
+
Element: React.FC<{
|
|
123
|
+
render: string;
|
|
124
|
+
} & React.SVGProps<any>>;
|
|
125
|
+
styles: React.CSSProperties;
|
|
126
|
+
};
|
|
127
|
+
declare const Line: React.FC<RadialTreeRadianLineAsProps>;
|
|
128
|
+
export interface IRadialTreeRadianCapProps {
|
|
129
|
+
x?: number;
|
|
130
|
+
y?: number;
|
|
131
|
+
radius?: number;
|
|
132
|
+
color?: string;
|
|
133
|
+
['data-radial-animation']?: `${string}-cap-circle`;
|
|
134
|
+
['data-radian-index']?: number;
|
|
135
|
+
}
|
|
136
|
+
declare type RadialTreeRadianCapAsProps = IRadialTreeRadianCapProps & {
|
|
137
|
+
Element: React.FC<{
|
|
138
|
+
render: string;
|
|
139
|
+
} & React.SVGProps<any>>;
|
|
140
|
+
styles: React.CSSProperties;
|
|
141
|
+
};
|
|
142
|
+
declare const Cap: React.FC<RadialTreeRadianCapAsProps>;
|
|
143
|
+
export interface IRadialTreeRadianIconProps {
|
|
144
|
+
x?: number;
|
|
145
|
+
y?: number;
|
|
146
|
+
iconSize?: number;
|
|
147
|
+
color?: string;
|
|
148
|
+
['data-radial-animation']?: `${string}-cap-icon`;
|
|
149
|
+
['data-radian-index']?: number;
|
|
150
|
+
tag?: React.FC;
|
|
151
|
+
isActive?: boolean;
|
|
152
|
+
}
|
|
153
|
+
declare type RadialTreeRadianIconAsProps = IRadialTreeRadianIconProps & {
|
|
154
|
+
Element: React.FC<{
|
|
155
|
+
render: string | React.FC;
|
|
156
|
+
} & React.SVGProps<any>>;
|
|
157
|
+
x: number;
|
|
158
|
+
y: number;
|
|
159
|
+
iconSize: number;
|
|
160
|
+
styles: React.CSSProperties;
|
|
161
|
+
};
|
|
162
|
+
declare const Icon: React.FC<RadialTreeRadianIconAsProps>;
|
|
163
|
+
export interface IRadialTreeRadianLabelProps {
|
|
164
|
+
x?: number;
|
|
165
|
+
y?: number;
|
|
166
|
+
color?: string;
|
|
167
|
+
textSize?: number;
|
|
168
|
+
['data-radial-animation']?: `${string}-label`;
|
|
169
|
+
['data-radian-index']?: number;
|
|
170
|
+
label?: string;
|
|
171
|
+
isHorizontal?: boolean;
|
|
172
|
+
angle?: number;
|
|
173
|
+
}
|
|
174
|
+
declare type RadialTreeRadianLabelAsProps = IRadialTreeRadianLabelProps & {
|
|
175
|
+
Element: React.FC<{
|
|
176
|
+
render: string;
|
|
177
|
+
} & React.SVGProps<any>>;
|
|
178
|
+
Children: React.FC;
|
|
179
|
+
styles: React.CSSProperties;
|
|
180
|
+
x: number;
|
|
181
|
+
y: number;
|
|
182
|
+
angle: number;
|
|
183
|
+
textSize: number;
|
|
184
|
+
};
|
|
185
|
+
declare const Label: React.FC<RadialTreeRadianLabelAsProps>;
|
|
186
|
+
export interface IRadialTreeTitleProps {
|
|
187
|
+
x?: number;
|
|
188
|
+
y?: number;
|
|
189
|
+
textSize?: number;
|
|
190
|
+
['data-radial-animation']?: `${string}-label`;
|
|
191
|
+
color?: string;
|
|
192
|
+
}
|
|
193
|
+
declare const RadialTree: (<T>(props: CProps<IRadialTreeProps & T, {}, {}>) => ReturnEl) & {
|
|
194
|
+
Title: <T_1>(props: CProps<IRadialTreeTitleProps & T_1, {}, {}>) => ReturnEl;
|
|
195
|
+
Radian: (<T_2>(props: CProps<IRadialTreeRadianProps & T_2, {}, {}>) => ReturnEl) & {
|
|
196
|
+
Line: <T_3>(props: CProps<IRadialTreeRadianLineProps & T_3, {}, {}>) => ReturnEl;
|
|
197
|
+
Cap: <T_4>(props: CProps<IRadialTreeRadianCapProps & T_4, {}, {}>) => ReturnEl;
|
|
198
|
+
Icon: <T_5>(props: CProps<IRadialTreeRadianIconProps & T_5, {}, {}>) => ReturnEl;
|
|
199
|
+
Label: <T_6>(props: CProps<IRadialTreeRadianLabelProps & T_6, {}, {}>) => ReturnEl;
|
|
200
|
+
};
|
|
201
|
+
};
|
|
202
|
+
export default RadialTree;
|
package/lib/types/index.d.ts
CHANGED
|
@@ -34,6 +34,12 @@ export * from './Area';
|
|
|
34
34
|
export { default as StackedArea } from './StackedArea';
|
|
35
35
|
export * from './StackedArea';
|
|
36
36
|
|
|
37
|
+
/** It becomes resolvable after building and moving file to lib dir */
|
|
38
|
+
// eslint-disable-next-line import/no-unresolved
|
|
39
|
+
export { default as RadialTree } from './RadialTree';
|
|
40
|
+
// eslint-disable-next-line import/no-unresolved
|
|
41
|
+
export * from './RadialTree';
|
|
42
|
+
|
|
37
43
|
export { default as Donut } from './Donut';
|
|
38
44
|
export * from './Donut';
|
|
39
45
|
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Numeric } from 'd3-array';
|
|
2
|
+
import { ScaleIdentity, ScaleTime, ScaleContinuousNumeric, ScaleBand, ScalePoint } from 'd3-scale';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
declare const CONSTANT: {
|
|
5
|
+
readonly VIRTUAL_ELEMENT: symbol;
|
|
6
|
+
};
|
|
7
|
+
export { CONSTANT };
|
|
8
|
+
export declare const eventToPoint: (event: React.MouseEvent<HTMLElement>, svgRoot: SVGElement) => number[];
|
|
9
|
+
declare type InvertableScale = ScaleIdentity | ScaleTime<unknown, unknown> | ScaleContinuousNumeric<unknown, unknown>;
|
|
10
|
+
export declare const invert: <Scale extends InvertableScale = InvertableScale>(scale: Scale, value: number) => number | Date;
|
|
11
|
+
export declare const definedNullData: (x: number, y: number) => (plot: {
|
|
12
|
+
[xOrY: number]: unknown;
|
|
13
|
+
}) => boolean;
|
|
14
|
+
export declare const definedData: (x: number, y: number) => (plot: {
|
|
15
|
+
[xOrY: number]: unknown;
|
|
16
|
+
}) => boolean;
|
|
17
|
+
export declare const scaleOfBandwidth: <Scale extends ScaleBand<{}>>(scale: Scale, value: number) => number | undefined;
|
|
18
|
+
export declare const minMax: <Key extends string = string, Data extends Iterable<{ [key in Key]: Numeric | null | undefined; }> = Iterable<{ [key_1 in Key]: Numeric | null | undefined; }>>(data: Data, key: Key) => [undefined, undefined] | [Numeric, Numeric] | [string, string];
|
|
19
|
+
export declare const getNullData: <Name extends string = string, Data extends { [name in Name]?: unknown; } = {}>(data: Data[], defined: (data: Data) => boolean, name: Name) => Data[];
|
|
20
|
+
declare type IndexFromDataScale = ScaleIdentity | ScaleTime<unknown, unknown> | ScaleContinuousNumeric<unknown, unknown> | ScaleBand<{}> | ScalePoint<{}>;
|
|
21
|
+
export declare const getIndexFromData: <Data extends {
|
|
22
|
+
[key: string]: number;
|
|
23
|
+
} = {}, Scale extends IndexFromDataScale = IndexFromDataScale>(data: Data[], scale: Scale, key: string, value: number) => number | null;
|
|
24
|
+
export declare const roundedPath: (x: number, y: number, w: number, h: number, r: number, tl?: boolean, tr?: boolean, bl?: boolean, br?: boolean) => string;
|
|
25
|
+
export declare const getBandwidth: <Scale extends ScaleBand<{}>>(scale: Scale) => number;
|
|
26
|
+
export declare const memoize: <Func extends (...args: any[]) => any>(func: Func) => Func;
|
|
27
|
+
export declare const measureText: (text: string, fontSize?: number | undefined) => number;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@semcore/d3-chart",
|
|
3
3
|
"description": "SEMRush D3 Chart Component",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.9.0",
|
|
5
5
|
"main": "lib/cjs/index.js",
|
|
6
6
|
"module": "lib/es6/index.js",
|
|
7
7
|
"typings": "lib/types/index.d.ts",
|
|
@@ -9,21 +9,22 @@
|
|
|
9
9
|
"author": "Roman Lysov <r.lysov@semrush.com>",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"scripts": {
|
|
12
|
-
"build": "build --source=js",
|
|
12
|
+
"build": "build --source=js,ts",
|
|
13
13
|
"test": "jest"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
+
"@semcore/animation": "^1",
|
|
16
17
|
"@semcore/flex-box": "^4",
|
|
17
18
|
"@semcore/popper": "^4.9",
|
|
18
19
|
"@semcore/utils": "^3.15",
|
|
19
|
-
"@
|
|
20
|
-
"
|
|
21
|
-
"d3-
|
|
22
|
-
"d3-
|
|
23
|
-
"d3-
|
|
24
|
-
"d3-
|
|
25
|
-
"
|
|
26
|
-
"
|
|
20
|
+
"@upsetjs/venn.js": "1.4.1",
|
|
21
|
+
"d3-array": "3.1.6",
|
|
22
|
+
"d3-shape": "3.1.0",
|
|
23
|
+
"d3-scale": "3.3.0",
|
|
24
|
+
"d3-interpolate": "3.0.1",
|
|
25
|
+
"d3-transition": "3.0.1",
|
|
26
|
+
"resize-observer-polyfill": "1.5.1",
|
|
27
|
+
"hoist-non-react-statics": "3.3.2"
|
|
27
28
|
},
|
|
28
29
|
"peerDependencies": {
|
|
29
30
|
"@semcore/core": "^1.11",
|
|
@@ -36,5 +37,11 @@
|
|
|
36
37
|
"type": "git",
|
|
37
38
|
"url": "https://github.com/semrush/intergalactic.git",
|
|
38
39
|
"directory": "semcore/d3-chart"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@semcore/jest-preset-ui": "1.0.0",
|
|
43
|
+
"@types/d3-array": "^3.0.2",
|
|
44
|
+
"@types/d3-scale": "^4.0.2",
|
|
45
|
+
"@types/d3-transition": "^3.0.1"
|
|
39
46
|
}
|
|
40
47
|
}
|
package/src/Axis.jsx
CHANGED
|
@@ -274,12 +274,22 @@ function Grid(props) {
|
|
|
274
274
|
function Title(props) {
|
|
275
275
|
const { Element: STitle, styles, scale, position } = props;
|
|
276
276
|
|
|
277
|
+
const { x, y } = MAP_POSITION_TITlE[position](scale);
|
|
278
|
+
|
|
279
|
+
const sstyles = sstyled(styles);
|
|
280
|
+
const sTitleStyles = sstyles.cn('STitle', {
|
|
281
|
+
'transform-origin': `${x.toFixed(2)}px ${y.toFixed(2)}px`,
|
|
282
|
+
});
|
|
283
|
+
|
|
277
284
|
return sstyled(styles)(
|
|
278
285
|
<STitle
|
|
279
286
|
render="text"
|
|
280
287
|
childrenPosition="inside"
|
|
281
288
|
position={position}
|
|
282
|
-
{
|
|
289
|
+
className={sTitleStyles.className}
|
|
290
|
+
style={sTitleStyles.style}
|
|
291
|
+
x={x}
|
|
292
|
+
y={y}
|
|
283
293
|
/>,
|
|
284
294
|
);
|
|
285
295
|
}
|
package/src/Bubble.jsx
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { Component, sstyled } from '@semcore/core';
|
|
3
3
|
import canUseDOM from '@semcore/utils/lib/canUseDOM';
|
|
4
|
-
import { CONSTANT } from './utils';
|
|
4
|
+
import { CONSTANT, measureText } from './utils';
|
|
5
5
|
import createElement from './createElement';
|
|
6
6
|
import uniqueIDEnhancement from '@semcore/utils/lib/uniqueID';
|
|
7
7
|
import { transition } from 'd3-transition';
|
|
@@ -9,26 +9,6 @@ import style from './style/bubble.shadow.css';
|
|
|
9
9
|
import ClipPath from './ClipPath';
|
|
10
10
|
import { scaleSqrt } from 'd3-scale';
|
|
11
11
|
|
|
12
|
-
const memoize = (func) => {
|
|
13
|
-
const results = {};
|
|
14
|
-
return (argsKey) => {
|
|
15
|
-
if (!results[argsKey]) {
|
|
16
|
-
results[argsKey] = func(argsKey);
|
|
17
|
-
}
|
|
18
|
-
return results[argsKey];
|
|
19
|
-
};
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
const measureText = memoize((text) => {
|
|
23
|
-
const span = document.createElement('span');
|
|
24
|
-
span.append(document.createTextNode(text));
|
|
25
|
-
span.style.display = 'inline-block';
|
|
26
|
-
document.body.append(span);
|
|
27
|
-
const textLength = span.offsetWidth;
|
|
28
|
-
span.remove();
|
|
29
|
-
return textLength;
|
|
30
|
-
});
|
|
31
|
-
|
|
32
12
|
class BubbleRoot extends Component {
|
|
33
13
|
static displayName = 'Bubble';
|
|
34
14
|
static style = style;
|
package/src/ClipPath.jsx
CHANGED