victory-box-plot 37.3.2 → 37.3.4
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 +8 -0
- package/dist/victory-box-plot.js +335 -289
- package/dist/victory-box-plot.min.js +1 -1
- package/es/helper-methods.js +24 -24
- package/es/victory-box-plot.d.ts +7 -7
- package/lib/helper-methods.js +24 -24
- package/lib/victory-box-plot.d.ts +7 -7
- package/package.json +3 -31
- package/src/helper-methods.tsx +5 -1
package/es/helper-methods.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
1
|
+
import defaults from "lodash/defaults";
|
|
2
|
+
import groupBy from "lodash/groupBy";
|
|
3
|
+
import orderBy from "lodash/orderBy";
|
|
4
|
+
import uniq from "lodash/uniq";
|
|
5
5
|
import { Helpers, Scale, Domain, Data, Collection } from "victory-core";
|
|
6
6
|
import { min as d3Min, max as d3Max, quantile as d3Quantile } from "victory-vendor/d3-array";
|
|
7
7
|
const TYPES = ["max", "min", "median", "q1", "q3"];
|
|
@@ -14,7 +14,7 @@ const checkProcessedData = data => {
|
|
|
14
14
|
if (hasQuartileAttributes) {
|
|
15
15
|
// check that the independent variable is distinct
|
|
16
16
|
const values = data.map(d => d._x);
|
|
17
|
-
if (!
|
|
17
|
+
if (!uniq(values).length === values.length) {
|
|
18
18
|
throw new Error(`
|
|
19
19
|
data prop may only take an array of objects with a unique
|
|
20
20
|
independent variable. Make sure your x values are distinct.
|
|
@@ -61,15 +61,15 @@ const processData = data => {
|
|
|
61
61
|
const dataArray = datum[sortKey].map(d => Object.assign({}, datum, {
|
|
62
62
|
[sortKey]: d
|
|
63
63
|
}));
|
|
64
|
-
const sortedData =
|
|
64
|
+
const sortedData = orderBy(dataArray, sortKey);
|
|
65
65
|
return getSummaryStatistics(sortedData);
|
|
66
66
|
});
|
|
67
67
|
} else {
|
|
68
68
|
/* Group data by independent variable and generate summary statistics for each group */
|
|
69
|
-
const groupedData =
|
|
69
|
+
const groupedData = groupBy(data, groupKey);
|
|
70
70
|
return Object.keys(groupedData).map(key => {
|
|
71
71
|
const datum = groupedData[key];
|
|
72
|
-
const sortedData =
|
|
72
|
+
const sortedData = orderBy(datum, sortKey);
|
|
73
73
|
return getSummaryStatistics(sortedData);
|
|
74
74
|
});
|
|
75
75
|
}
|
|
@@ -123,7 +123,7 @@ const getLabelStyle = (props, styleObject, namespace) => {
|
|
|
123
123
|
return baseStyle;
|
|
124
124
|
}
|
|
125
125
|
const tooltipTheme = props.theme && props.theme.tooltip || {};
|
|
126
|
-
return
|
|
126
|
+
return defaults({}, tooltipTheme.style, baseStyle);
|
|
127
127
|
};
|
|
128
128
|
const getStyles = function (props, styleObject) {
|
|
129
129
|
if (styleObject === void 0) {
|
|
@@ -137,23 +137,23 @@ const getStyles = function (props, styleObject) {
|
|
|
137
137
|
height: "100%",
|
|
138
138
|
width: "100%"
|
|
139
139
|
};
|
|
140
|
-
const labelStyles =
|
|
141
|
-
const boxStyles =
|
|
142
|
-
const whiskerStyles =
|
|
140
|
+
const labelStyles = defaults({}, style.labels, getLabelStyle(props, styleObject));
|
|
141
|
+
const boxStyles = defaults({}, style.boxes, styleObject.boxes);
|
|
142
|
+
const whiskerStyles = defaults({}, style.whiskers, styleObject.whiskers);
|
|
143
143
|
return {
|
|
144
144
|
boxes: boxStyles,
|
|
145
145
|
labels: labelStyles,
|
|
146
|
-
parent:
|
|
147
|
-
max:
|
|
148
|
-
maxLabels:
|
|
149
|
-
median:
|
|
150
|
-
medianLabels:
|
|
151
|
-
min:
|
|
152
|
-
minLabels:
|
|
153
|
-
q1:
|
|
154
|
-
q1Labels:
|
|
155
|
-
q3:
|
|
156
|
-
q3Labels:
|
|
146
|
+
parent: defaults({}, style.parent, styleObject.parent, parentStyles),
|
|
147
|
+
max: defaults({}, style.max, styleObject.max, whiskerStyles),
|
|
148
|
+
maxLabels: defaults({}, style.maxLabels, getLabelStyle(props, styleObject, "max"), labelStyles),
|
|
149
|
+
median: defaults({}, style.median, styleObject.median, whiskerStyles),
|
|
150
|
+
medianLabels: defaults({}, style.medianLabels, getLabelStyle(props, styleObject, "median"), labelStyles),
|
|
151
|
+
min: defaults({}, style.min, styleObject.min, whiskerStyles),
|
|
152
|
+
minLabels: defaults({}, style.minLabels, getLabelStyle(props, styleObject, "min"), labelStyles),
|
|
153
|
+
q1: defaults({}, style.q1, styleObject.q1, boxStyles),
|
|
154
|
+
q1Labels: defaults({}, style.q1Labels, getLabelStyle(props, styleObject, "q1"), labelStyles),
|
|
155
|
+
q3: defaults({}, style.q3, styleObject.q3, boxStyles),
|
|
156
|
+
q3Labels: defaults({}, style.q3Labels, getLabelStyle(props, styleObject, "q3"), labelStyles),
|
|
157
157
|
whiskers: whiskerStyles
|
|
158
158
|
};
|
|
159
159
|
};
|
|
@@ -366,7 +366,7 @@ const getLabelProps = (props, text, type) => {
|
|
|
366
366
|
return labelProps;
|
|
367
367
|
}
|
|
368
368
|
const tooltipTheme = theme && theme.tooltip || {};
|
|
369
|
-
return
|
|
369
|
+
return defaults({}, labelProps, Helpers.omit(tooltipTheme, ["style"]));
|
|
370
370
|
};
|
|
371
371
|
const getDataProps = (props, type) => {
|
|
372
372
|
if (type === "median") {
|
package/es/victory-box-plot.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { EventPropTypeInterface, DomainPropType, DomainPaddingPropType, OrientationTypes, StringOrNumberOrCallback, VictoryDatableProps, VictoryCommonProps, VictoryStyleObject, VictoryLabelStyleObject, EventsMixinClass } from "victory-core";
|
|
3
|
-
export
|
|
3
|
+
export type VictoryBoxPlotLabelType = boolean | (string | number)[] | {
|
|
4
4
|
(): any;
|
|
5
5
|
} | {
|
|
6
6
|
(data: any): string | null;
|
|
@@ -104,9 +104,9 @@ export declare const VictoryBoxPlot: {
|
|
|
104
104
|
getAllEvents(props: any): any;
|
|
105
105
|
getComponentProps(component: React.ReactNode, type: string, index: string | number): any;
|
|
106
106
|
renderContainer(component: any, children: any): React.DetailedReactHTMLElement<any, HTMLElement>;
|
|
107
|
-
animateComponent(props: import("victory-core").EventMixinCommonProps, defaultAnimationWhitelist: string[]): React.ReactElement
|
|
107
|
+
animateComponent(props: import("victory-core").EventMixinCommonProps, defaultAnimationWhitelist: string[]): React.ReactElement;
|
|
108
108
|
renderContinuousData(props: import("victory-core").EventMixinCommonProps): React.DetailedReactHTMLElement<any, HTMLElement>;
|
|
109
|
-
renderData(props: any, shouldRenderDatum?: (
|
|
109
|
+
renderData(props: any, shouldRenderDatum?: (datum: any) => boolean): React.DetailedReactHTMLElement<any, HTMLElement>;
|
|
110
110
|
context: unknown;
|
|
111
111
|
setState<K extends never>(state: {} | ((prevState: Readonly<{}>, props: Readonly<import("victory-core").EventMixinCommonProps>) => {} | Pick<{}, K> | null) | Pick<{}, K> | null, callback?: (() => void) | undefined): void;
|
|
112
112
|
forceUpdate(callback?: (() => void) | undefined): void;
|
|
@@ -123,17 +123,17 @@ export declare const VictoryBoxPlot: {
|
|
|
123
123
|
UNSAFE_componentWillReceiveProps?(nextProps: Readonly<import("victory-core").EventMixinCommonProps>, nextContext: any): void;
|
|
124
124
|
componentWillUpdate?(nextProps: Readonly<import("victory-core").EventMixinCommonProps>, nextState: Readonly<{}>, nextContext: any): void;
|
|
125
125
|
UNSAFE_componentWillUpdate?(nextProps: Readonly<import("victory-core").EventMixinCommonProps>, nextState: Readonly<{}>, nextContext: any): void;
|
|
126
|
-
componentEvents: import("@/victory-core/lib/victory-util/events").ComponentEvent
|
|
126
|
+
componentEvents: Array<import("@/victory-core/lib/victory-util/events").ComponentEvent>;
|
|
127
127
|
getSharedEventState: (key: string, value: string) => unknown;
|
|
128
128
|
baseProps: Record<string, object>;
|
|
129
129
|
dataKeys: string[];
|
|
130
130
|
hasEvents: unknown;
|
|
131
131
|
events: unknown;
|
|
132
132
|
};
|
|
133
|
-
getBaseProps?(props: import("victory-core").EventMixinCommonProps):
|
|
134
|
-
role?:
|
|
133
|
+
getBaseProps?(props: import("victory-core").EventMixinCommonProps): import("victory-core").EventMixinCalculatedValues["baseProps"];
|
|
134
|
+
role?: import("victory-core").VictoryComponentRole;
|
|
135
135
|
expectedComponents?: string[] | undefined;
|
|
136
|
-
getChildren?: ((props: import("victory-core").EventMixinCommonProps, childComponents?: React.ReactNode
|
|
136
|
+
getChildren?: ((props: import("victory-core").EventMixinCommonProps, childComponents?: Array<React.ReactNode>, calculatedProps?: import("victory-core").EventMixinCommonProps | undefined) => void) | undefined;
|
|
137
137
|
animationWhitelist?: string[] | undefined;
|
|
138
138
|
} & typeof VictoryBoxPlotBase;
|
|
139
139
|
export {};
|
package/lib/helper-methods.js
CHANGED
|
@@ -4,10 +4,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.getDomain = exports.getData = exports.getBaseProps = void 0;
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
7
|
+
var _defaults = _interopRequireDefault(require("lodash/defaults"));
|
|
8
|
+
var _groupBy = _interopRequireDefault(require("lodash/groupBy"));
|
|
9
|
+
var _orderBy = _interopRequireDefault(require("lodash/orderBy"));
|
|
10
|
+
var _uniq = _interopRequireDefault(require("lodash/uniq"));
|
|
11
11
|
var _victoryCore = require("victory-core");
|
|
12
12
|
var _d3Array = require("victory-vendor/d3-array");
|
|
13
13
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -21,7 +21,7 @@ const checkProcessedData = data => {
|
|
|
21
21
|
if (hasQuartileAttributes) {
|
|
22
22
|
// check that the independent variable is distinct
|
|
23
23
|
const values = data.map(d => d._x);
|
|
24
|
-
if (!(0,
|
|
24
|
+
if (!(0, _uniq.default)(values).length === values.length) {
|
|
25
25
|
throw new Error(`
|
|
26
26
|
data prop may only take an array of objects with a unique
|
|
27
27
|
independent variable. Make sure your x values are distinct.
|
|
@@ -68,15 +68,15 @@ const processData = data => {
|
|
|
68
68
|
const dataArray = datum[sortKey].map(d => Object.assign({}, datum, {
|
|
69
69
|
[sortKey]: d
|
|
70
70
|
}));
|
|
71
|
-
const sortedData = (0,
|
|
71
|
+
const sortedData = (0, _orderBy.default)(dataArray, sortKey);
|
|
72
72
|
return getSummaryStatistics(sortedData);
|
|
73
73
|
});
|
|
74
74
|
} else {
|
|
75
75
|
/* Group data by independent variable and generate summary statistics for each group */
|
|
76
|
-
const groupedData = (0,
|
|
76
|
+
const groupedData = (0, _groupBy.default)(data, groupKey);
|
|
77
77
|
return Object.keys(groupedData).map(key => {
|
|
78
78
|
const datum = groupedData[key];
|
|
79
|
-
const sortedData = (0,
|
|
79
|
+
const sortedData = (0, _orderBy.default)(datum, sortKey);
|
|
80
80
|
return getSummaryStatistics(sortedData);
|
|
81
81
|
});
|
|
82
82
|
}
|
|
@@ -132,7 +132,7 @@ const getLabelStyle = (props, styleObject, namespace) => {
|
|
|
132
132
|
return baseStyle;
|
|
133
133
|
}
|
|
134
134
|
const tooltipTheme = props.theme && props.theme.tooltip || {};
|
|
135
|
-
return (0,
|
|
135
|
+
return (0, _defaults.default)({}, tooltipTheme.style, baseStyle);
|
|
136
136
|
};
|
|
137
137
|
const getStyles = function (props, styleObject) {
|
|
138
138
|
if (styleObject === void 0) {
|
|
@@ -146,23 +146,23 @@ const getStyles = function (props, styleObject) {
|
|
|
146
146
|
height: "100%",
|
|
147
147
|
width: "100%"
|
|
148
148
|
};
|
|
149
|
-
const labelStyles = (0,
|
|
150
|
-
const boxStyles = (0,
|
|
151
|
-
const whiskerStyles = (0,
|
|
149
|
+
const labelStyles = (0, _defaults.default)({}, style.labels, getLabelStyle(props, styleObject));
|
|
150
|
+
const boxStyles = (0, _defaults.default)({}, style.boxes, styleObject.boxes);
|
|
151
|
+
const whiskerStyles = (0, _defaults.default)({}, style.whiskers, styleObject.whiskers);
|
|
152
152
|
return {
|
|
153
153
|
boxes: boxStyles,
|
|
154
154
|
labels: labelStyles,
|
|
155
|
-
parent: (0,
|
|
156
|
-
max: (0,
|
|
157
|
-
maxLabels: (0,
|
|
158
|
-
median: (0,
|
|
159
|
-
medianLabels: (0,
|
|
160
|
-
min: (0,
|
|
161
|
-
minLabels: (0,
|
|
162
|
-
q1: (0,
|
|
163
|
-
q1Labels: (0,
|
|
164
|
-
q3: (0,
|
|
165
|
-
q3Labels: (0,
|
|
155
|
+
parent: (0, _defaults.default)({}, style.parent, styleObject.parent, parentStyles),
|
|
156
|
+
max: (0, _defaults.default)({}, style.max, styleObject.max, whiskerStyles),
|
|
157
|
+
maxLabels: (0, _defaults.default)({}, style.maxLabels, getLabelStyle(props, styleObject, "max"), labelStyles),
|
|
158
|
+
median: (0, _defaults.default)({}, style.median, styleObject.median, whiskerStyles),
|
|
159
|
+
medianLabels: (0, _defaults.default)({}, style.medianLabels, getLabelStyle(props, styleObject, "median"), labelStyles),
|
|
160
|
+
min: (0, _defaults.default)({}, style.min, styleObject.min, whiskerStyles),
|
|
161
|
+
minLabels: (0, _defaults.default)({}, style.minLabels, getLabelStyle(props, styleObject, "min"), labelStyles),
|
|
162
|
+
q1: (0, _defaults.default)({}, style.q1, styleObject.q1, boxStyles),
|
|
163
|
+
q1Labels: (0, _defaults.default)({}, style.q1Labels, getLabelStyle(props, styleObject, "q1"), labelStyles),
|
|
164
|
+
q3: (0, _defaults.default)({}, style.q3, styleObject.q3, boxStyles),
|
|
165
|
+
q3Labels: (0, _defaults.default)({}, style.q3Labels, getLabelStyle(props, styleObject, "q3"), labelStyles),
|
|
166
166
|
whiskers: whiskerStyles
|
|
167
167
|
};
|
|
168
168
|
};
|
|
@@ -375,7 +375,7 @@ const getLabelProps = (props, text, type) => {
|
|
|
375
375
|
return labelProps;
|
|
376
376
|
}
|
|
377
377
|
const tooltipTheme = theme && theme.tooltip || {};
|
|
378
|
-
return (0,
|
|
378
|
+
return (0, _defaults.default)({}, labelProps, _victoryCore.Helpers.omit(tooltipTheme, ["style"]));
|
|
379
379
|
};
|
|
380
380
|
const getDataProps = (props, type) => {
|
|
381
381
|
if (type === "median") {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { EventPropTypeInterface, DomainPropType, DomainPaddingPropType, OrientationTypes, StringOrNumberOrCallback, VictoryDatableProps, VictoryCommonProps, VictoryStyleObject, VictoryLabelStyleObject, EventsMixinClass } from "victory-core";
|
|
3
|
-
export
|
|
3
|
+
export type VictoryBoxPlotLabelType = boolean | (string | number)[] | {
|
|
4
4
|
(): any;
|
|
5
5
|
} | {
|
|
6
6
|
(data: any): string | null;
|
|
@@ -104,9 +104,9 @@ export declare const VictoryBoxPlot: {
|
|
|
104
104
|
getAllEvents(props: any): any;
|
|
105
105
|
getComponentProps(component: React.ReactNode, type: string, index: string | number): any;
|
|
106
106
|
renderContainer(component: any, children: any): React.DetailedReactHTMLElement<any, HTMLElement>;
|
|
107
|
-
animateComponent(props: import("victory-core").EventMixinCommonProps, defaultAnimationWhitelist: string[]): React.ReactElement
|
|
107
|
+
animateComponent(props: import("victory-core").EventMixinCommonProps, defaultAnimationWhitelist: string[]): React.ReactElement;
|
|
108
108
|
renderContinuousData(props: import("victory-core").EventMixinCommonProps): React.DetailedReactHTMLElement<any, HTMLElement>;
|
|
109
|
-
renderData(props: any, shouldRenderDatum?: (
|
|
109
|
+
renderData(props: any, shouldRenderDatum?: (datum: any) => boolean): React.DetailedReactHTMLElement<any, HTMLElement>;
|
|
110
110
|
context: unknown;
|
|
111
111
|
setState<K extends never>(state: {} | ((prevState: Readonly<{}>, props: Readonly<import("victory-core").EventMixinCommonProps>) => {} | Pick<{}, K> | null) | Pick<{}, K> | null, callback?: (() => void) | undefined): void;
|
|
112
112
|
forceUpdate(callback?: (() => void) | undefined): void;
|
|
@@ -123,17 +123,17 @@ export declare const VictoryBoxPlot: {
|
|
|
123
123
|
UNSAFE_componentWillReceiveProps?(nextProps: Readonly<import("victory-core").EventMixinCommonProps>, nextContext: any): void;
|
|
124
124
|
componentWillUpdate?(nextProps: Readonly<import("victory-core").EventMixinCommonProps>, nextState: Readonly<{}>, nextContext: any): void;
|
|
125
125
|
UNSAFE_componentWillUpdate?(nextProps: Readonly<import("victory-core").EventMixinCommonProps>, nextState: Readonly<{}>, nextContext: any): void;
|
|
126
|
-
componentEvents: import("@/victory-core/lib/victory-util/events").ComponentEvent
|
|
126
|
+
componentEvents: Array<import("@/victory-core/lib/victory-util/events").ComponentEvent>;
|
|
127
127
|
getSharedEventState: (key: string, value: string) => unknown;
|
|
128
128
|
baseProps: Record<string, object>;
|
|
129
129
|
dataKeys: string[];
|
|
130
130
|
hasEvents: unknown;
|
|
131
131
|
events: unknown;
|
|
132
132
|
};
|
|
133
|
-
getBaseProps?(props: import("victory-core").EventMixinCommonProps):
|
|
134
|
-
role?:
|
|
133
|
+
getBaseProps?(props: import("victory-core").EventMixinCommonProps): import("victory-core").EventMixinCalculatedValues["baseProps"];
|
|
134
|
+
role?: import("victory-core").VictoryComponentRole;
|
|
135
135
|
expectedComponents?: string[] | undefined;
|
|
136
|
-
getChildren?: ((props: import("victory-core").EventMixinCommonProps, childComponents?: React.ReactNode
|
|
136
|
+
getChildren?: ((props: import("victory-core").EventMixinCommonProps, childComponents?: Array<React.ReactNode>, calculatedProps?: import("victory-core").EventMixinCommonProps | undefined) => void) | undefined;
|
|
137
137
|
animationWhitelist?: string[] | undefined;
|
|
138
138
|
} & typeof VictoryBoxPlotBase;
|
|
139
139
|
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "victory-box-plot",
|
|
3
|
-
"version": "37.3.
|
|
3
|
+
"version": "37.3.4",
|
|
4
4
|
"description": "Box Plot Component for Victory",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"data visualization",
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
"license": "MIT",
|
|
22
22
|
"dependencies": {
|
|
23
23
|
"lodash": "^4.17.19",
|
|
24
|
-
"victory-core": "37.3.
|
|
25
|
-
"victory-vendor": "37.3.
|
|
24
|
+
"victory-core": "37.3.4",
|
|
25
|
+
"victory-vendor": "37.3.4"
|
|
26
26
|
},
|
|
27
27
|
"peerDependencies": {
|
|
28
28
|
"react": ">=16.6.0"
|
|
@@ -190,32 +190,6 @@
|
|
|
190
190
|
"pnpm-lock.yaml"
|
|
191
191
|
]
|
|
192
192
|
},
|
|
193
|
-
"format": {
|
|
194
|
-
"command": "nps format:pkg",
|
|
195
|
-
"files": [
|
|
196
|
-
"src/**",
|
|
197
|
-
"*.json",
|
|
198
|
-
"../../.prettierignore",
|
|
199
|
-
"../../.prettierrc.json"
|
|
200
|
-
],
|
|
201
|
-
"output": [],
|
|
202
|
-
"packageLocks": [
|
|
203
|
-
"pnpm-lock.yaml"
|
|
204
|
-
]
|
|
205
|
-
},
|
|
206
|
-
"format:fix": {
|
|
207
|
-
"command": "pnpm run format || nps format:pkg:fix",
|
|
208
|
-
"files": [
|
|
209
|
-
"src/**",
|
|
210
|
-
"*.json",
|
|
211
|
-
"../../.prettierignore",
|
|
212
|
-
"../../.prettierrc.json"
|
|
213
|
-
],
|
|
214
|
-
"output": [],
|
|
215
|
-
"packageLocks": [
|
|
216
|
-
"pnpm-lock.yaml"
|
|
217
|
-
]
|
|
218
|
-
},
|
|
219
193
|
"lint": {
|
|
220
194
|
"command": "eslint src",
|
|
221
195
|
"files": [
|
|
@@ -283,8 +257,6 @@
|
|
|
283
257
|
"check": "wireit",
|
|
284
258
|
"types:check": "wireit",
|
|
285
259
|
"types:create": "wireit",
|
|
286
|
-
"format": "wireit",
|
|
287
|
-
"format:fix": "wireit",
|
|
288
260
|
"lint": "wireit",
|
|
289
261
|
"lint:fix": "wireit",
|
|
290
262
|
"jest": "wireit"
|
package/src/helper-methods.tsx
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import defaults from "lodash/defaults";
|
|
2
|
+
import groupBy from "lodash/groupBy";
|
|
3
|
+
import orderBy from "lodash/orderBy";
|
|
4
|
+
import uniq from "lodash/uniq";
|
|
5
|
+
|
|
2
6
|
import { Helpers, Scale, Domain, Data, Collection } from "victory-core";
|
|
3
7
|
import {
|
|
4
8
|
min as d3Min,
|