@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.
Files changed (135) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/lib/cjs/Axis.js +33 -21
  3. package/lib/cjs/Axis.js.map +1 -1
  4. package/lib/cjs/Bar.js +3 -3
  5. package/lib/cjs/Bar.js.map +1 -1
  6. package/lib/cjs/Bubble.js +3 -24
  7. package/lib/cjs/Bubble.js.map +1 -1
  8. package/lib/cjs/ClipPath.js +2 -1
  9. package/lib/cjs/ClipPath.js.map +1 -1
  10. package/lib/cjs/Donut.js +1 -1
  11. package/lib/cjs/Donut.js.map +1 -1
  12. package/lib/cjs/Dots.js +1 -1
  13. package/lib/cjs/Dots.js.map +1 -1
  14. package/lib/cjs/GroupBar.js +8 -8
  15. package/lib/cjs/GroupBar.js.map +1 -1
  16. package/lib/cjs/HorizontalBar.js +3 -3
  17. package/lib/cjs/HorizontalBar.js.map +1 -1
  18. package/lib/cjs/Plot.js +16 -2
  19. package/lib/cjs/Plot.js.map +1 -1
  20. package/lib/cjs/RadialTree.js +691 -0
  21. package/lib/cjs/RadialTree.js.map +1 -0
  22. package/lib/cjs/ResponsiveContainer.js +2 -2
  23. package/lib/cjs/ResponsiveContainer.js.map +1 -1
  24. package/lib/cjs/StackBar.js +8 -8
  25. package/lib/cjs/StackBar.js.map +1 -1
  26. package/lib/cjs/StackedArea.js +8 -8
  27. package/lib/cjs/StackedArea.js.map +1 -1
  28. package/lib/cjs/Tooltip.js +6 -10
  29. package/lib/cjs/Tooltip.js.map +1 -1
  30. package/lib/cjs/Venn.js +2 -2
  31. package/lib/cjs/Venn.js.map +1 -1
  32. package/lib/cjs/createElement.js +3 -2
  33. package/lib/cjs/createElement.js.map +1 -1
  34. package/lib/cjs/index.js +8 -0
  35. package/lib/cjs/index.js.map +1 -1
  36. package/lib/cjs/style/axis.shadow.css +2 -4
  37. package/lib/cjs/style/plot.shadow.css +6 -0
  38. package/lib/cjs/style/radial-tree.shadow.css +23 -0
  39. package/lib/cjs/types/Area.d.ts +47 -0
  40. package/lib/cjs/types/Axis.d.ts +64 -0
  41. package/lib/cjs/types/Bar.d.ts +48 -0
  42. package/lib/cjs/types/Bubble.d.ts +27 -0
  43. package/lib/cjs/types/ClipPath.d.ts +26 -0
  44. package/lib/cjs/types/Donut.d.ts +42 -0
  45. package/lib/cjs/types/GroupBar.d.ts +20 -0
  46. package/lib/cjs/types/HorizontalBar.d.ts +29 -0
  47. package/lib/cjs/types/Hover.d.ts +15 -0
  48. package/lib/cjs/types/Line.d.ts +50 -0
  49. package/lib/cjs/types/Plot.d.ts +16 -0
  50. package/lib/cjs/types/ResponsiveContainer.d.ts +20 -0
  51. package/lib/cjs/types/ScatterPlot.d.ts +27 -0
  52. package/lib/cjs/types/StackBar.d.ts +26 -0
  53. package/lib/cjs/types/StackedArea.d.ts +26 -0
  54. package/lib/cjs/types/Tooltip.d.ts +31 -0
  55. package/lib/cjs/types/Venn.d.ts +45 -0
  56. package/lib/cjs/types/context.d.ts +6 -0
  57. package/lib/cjs/types/index.d.ts +53 -0
  58. package/lib/cjs/utils.js +120 -55
  59. package/lib/cjs/utils.js.map +1 -1
  60. package/lib/es6/Axis.js +33 -21
  61. package/lib/es6/Axis.js.map +1 -1
  62. package/lib/es6/Bar.js +3 -3
  63. package/lib/es6/Bar.js.map +1 -1
  64. package/lib/es6/Bubble.js +3 -24
  65. package/lib/es6/Bubble.js.map +1 -1
  66. package/lib/es6/ClipPath.js +2 -1
  67. package/lib/es6/ClipPath.js.map +1 -1
  68. package/lib/es6/Donut.js +1 -1
  69. package/lib/es6/Donut.js.map +1 -1
  70. package/lib/es6/Dots.js +1 -1
  71. package/lib/es6/Dots.js.map +1 -1
  72. package/lib/es6/GroupBar.js +8 -8
  73. package/lib/es6/GroupBar.js.map +1 -1
  74. package/lib/es6/HorizontalBar.js +3 -3
  75. package/lib/es6/HorizontalBar.js.map +1 -1
  76. package/lib/es6/Plot.js +18 -2
  77. package/lib/es6/Plot.js.map +1 -1
  78. package/lib/es6/RadialTree.js +679 -0
  79. package/lib/es6/RadialTree.js.map +1 -0
  80. package/lib/es6/ResponsiveContainer.js +2 -2
  81. package/lib/es6/ResponsiveContainer.js.map +1 -1
  82. package/lib/es6/StackBar.js +8 -8
  83. package/lib/es6/StackBar.js.map +1 -1
  84. package/lib/es6/StackedArea.js +8 -8
  85. package/lib/es6/StackedArea.js.map +1 -1
  86. package/lib/es6/Tooltip.js +6 -10
  87. package/lib/es6/Tooltip.js.map +1 -1
  88. package/lib/es6/Venn.js +2 -2
  89. package/lib/es6/Venn.js.map +1 -1
  90. package/lib/es6/createElement.js +3 -2
  91. package/lib/es6/createElement.js.map +1 -1
  92. package/lib/es6/index.js +1 -0
  93. package/lib/es6/index.js.map +1 -1
  94. package/lib/es6/style/axis.shadow.css +2 -4
  95. package/lib/es6/style/plot.shadow.css +6 -0
  96. package/lib/es6/style/radial-tree.shadow.css +23 -0
  97. package/lib/es6/types/Area.d.ts +47 -0
  98. package/lib/es6/types/Axis.d.ts +64 -0
  99. package/lib/es6/types/Bar.d.ts +48 -0
  100. package/lib/es6/types/Bubble.d.ts +27 -0
  101. package/lib/es6/types/ClipPath.d.ts +26 -0
  102. package/lib/es6/types/Donut.d.ts +42 -0
  103. package/lib/es6/types/GroupBar.d.ts +20 -0
  104. package/lib/es6/types/HorizontalBar.d.ts +29 -0
  105. package/lib/es6/types/Hover.d.ts +15 -0
  106. package/lib/es6/types/Line.d.ts +50 -0
  107. package/lib/es6/types/Plot.d.ts +16 -0
  108. package/lib/es6/types/ResponsiveContainer.d.ts +20 -0
  109. package/lib/es6/types/ScatterPlot.d.ts +27 -0
  110. package/lib/es6/types/StackBar.d.ts +26 -0
  111. package/lib/es6/types/StackedArea.d.ts +26 -0
  112. package/lib/es6/types/Tooltip.d.ts +31 -0
  113. package/lib/es6/types/Venn.d.ts +45 -0
  114. package/lib/es6/types/context.d.ts +6 -0
  115. package/lib/es6/types/index.d.ts +53 -0
  116. package/lib/es6/utils.js +95 -44
  117. package/lib/es6/utils.js.map +1 -1
  118. package/lib/types/RadialTree.d.ts +202 -0
  119. package/lib/types/index.d.ts +6 -0
  120. package/lib/types/utils.d.ts +27 -0
  121. package/package.json +17 -10
  122. package/src/Axis.jsx +11 -1
  123. package/src/Bubble.jsx +1 -21
  124. package/src/ClipPath.jsx +1 -0
  125. package/src/Donut.jsx +7 -9
  126. package/src/Plot.jsx +2 -0
  127. package/src/RadialTree.tsx +768 -0
  128. package/src/createElement.jsx +3 -1
  129. package/src/index.js +1 -0
  130. package/src/style/axis.shadow.css +2 -4
  131. package/src/style/plot.shadow.css +6 -0
  132. package/src/style/radial-tree.shadow.css +23 -0
  133. package/src/types/index.d.ts +6 -0
  134. package/src/utils.ts +227 -0
  135. 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 (p) {
26
- return p[x] !== null && p[y] !== null;
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 (p) {
31
- return p[x] !== null && p[x] !== undefined && p[y] !== null && p[y] !== undefined;
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 retval;
102
- retval = 'M' + (x + r) + ',' + y;
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
- retval += 'a' + r + ',' + r + ' 0 0 1 ' + r + ',' + r;
112
+ result += 'a' + r + ',' + r + ' 0 0 1 ' + r + ',' + r;
107
113
  } else {
108
- retval += 'h' + r;
109
- retval += 'v' + r;
114
+ result += 'h' + r;
115
+ result += 'v' + r;
110
116
  }
111
117
 
112
- retval += 'v' + (h - 2 * r);
118
+ result += 'v' + (h - 2 * r);
113
119
 
114
120
  if (br) {
115
- retval += 'a' + r + ',' + r + ' 0 0 1 ' + -r + ',' + r;
121
+ result += 'a' + r + ',' + r + ' 0 0 1 ' + -r + ',' + r;
116
122
  } else {
117
- retval += 'v' + r;
118
- retval += 'h' + -r;
123
+ result += 'v' + r;
124
+ result += 'h' + -r;
119
125
  }
120
126
 
121
- retval += 'h' + (2 * r - w);
127
+ result += 'h' + (2 * r - w);
122
128
 
123
129
  if (bl) {
124
- retval += 'a' + r + ',' + r + ' 0 0 1 ' + -r + ',' + -r;
130
+ result += 'a' + r + ',' + r + ' 0 0 1 ' + -r + ',' + -r;
125
131
  } else {
126
- retval += 'h' + -r;
127
- retval += 'v' + -r;
132
+ result += 'h' + -r;
133
+ result += 'v' + -r;
128
134
  }
129
135
 
130
- retval += 'v' + (2 * r - h);
136
+ result += 'v' + (2 * r - h);
131
137
 
132
138
  if (tl) {
133
- retval += 'a' + r + ',' + r + ' 0 0 1 ' + r + ',' + -r;
139
+ result += 'a' + r + ',' + r + ' 0 0 1 ' + r + ',' + -r;
134
140
  } else {
135
- retval += 'v' + -r;
136
- retval += 'h' + r;
141
+ result += 'v' + -r;
142
+ result += 'h' + r;
137
143
  }
138
144
 
139
- retval += 'z';
140
- return retval;
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
@@ -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":"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","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;
@@ -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.7.0",
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
- "@semcore/animation": "^1",
20
- "@upsetjs/venn.js": "^1.4.1",
21
- "d3-array": "^3",
22
- "d3-shape": "^3",
23
- "d3-scale": "^4",
24
- "d3-interpolate": "^3",
25
- "d3-transition": "^3",
26
- "resize-observer-polyfill": "^1.5"
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
- {...MAP_POSITION_TITlE[position](scale)}
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
@@ -34,6 +34,7 @@ class ClipPath extends Component {
34
34
  }
35
35
 
36
36
  render() {
37
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
37
38
  const { id, transition, tag: Tag, style, className, ...other } = this.asProps;
38
39
  return (
39
40
  <clipPath ref={this.refClipPath} id={id}>