@gravity-ui/charts 1.14.0 → 1.16.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 (79) hide show
  1. package/dist/cjs/components/ChartInner/useChartInnerProps.js +7 -2
  2. package/dist/cjs/components/Tooltip/ChartTooltipContent.d.ts +5 -2
  3. package/dist/cjs/components/Tooltip/ChartTooltipContent.js +2 -2
  4. package/dist/cjs/components/Tooltip/DefaultTooltipContent/Row.d.ts +2 -1
  5. package/dist/cjs/components/Tooltip/DefaultTooltipContent/Row.js +3 -3
  6. package/dist/cjs/components/Tooltip/DefaultTooltipContent/{RowTotals.d.ts → RowWithAggregation.d.ts} +2 -1
  7. package/dist/cjs/components/Tooltip/DefaultTooltipContent/{RowTotals.js → RowWithAggregation.js} +3 -3
  8. package/dist/cjs/components/Tooltip/DefaultTooltipContent/index.d.ts +4 -1
  9. package/dist/cjs/components/Tooltip/DefaultTooltipContent/index.js +187 -87
  10. package/dist/cjs/components/Tooltip/index.js +1 -1
  11. package/dist/cjs/components/Tooltip/styles.css +11 -1
  12. package/dist/cjs/hooks/useAxisScales/index.d.ts +1 -0
  13. package/dist/cjs/hooks/useAxisScales/index.js +53 -37
  14. package/dist/cjs/hooks/useChartOptions/x-axis.d.ts +3 -1
  15. package/dist/cjs/hooks/useChartOptions/x-axis.js +4 -3
  16. package/dist/cjs/hooks/useSeries/prepare-area.js +1 -0
  17. package/dist/cjs/hooks/useSeries/prepare-bar-x.js +1 -0
  18. package/dist/cjs/hooks/useSeries/prepare-bar-y.d.ts +1 -0
  19. package/dist/cjs/hooks/useSeries/prepare-bar-y.js +1 -0
  20. package/dist/cjs/hooks/useSeries/prepare-line.js +1 -0
  21. package/dist/cjs/hooks/useSeries/prepare-pie.js +1 -0
  22. package/dist/cjs/hooks/useSeries/prepare-radar.js +1 -0
  23. package/dist/cjs/hooks/useSeries/prepare-sankey.js +1 -0
  24. package/dist/cjs/hooks/useSeries/prepare-scatter.js +1 -0
  25. package/dist/cjs/hooks/useSeries/prepare-treemap.js +1 -0
  26. package/dist/cjs/hooks/useSeries/prepare-waterfall.js +1 -0
  27. package/dist/cjs/hooks/useSeries/types.d.ts +2 -1
  28. package/dist/cjs/hooks/utils/bar-x.d.ts +16 -0
  29. package/dist/cjs/hooks/utils/bar-x.js +41 -0
  30. package/dist/cjs/i18n/keysets/en.json +2 -1
  31. package/dist/cjs/i18n/keysets/ru.json +2 -1
  32. package/dist/cjs/types/chart/base.d.ts +13 -0
  33. package/dist/cjs/types/chart/tooltip.d.ts +19 -1
  34. package/dist/cjs/utils/chart/format.d.ts +9 -2
  35. package/dist/cjs/utils/chart/format.js +39 -5
  36. package/dist/cjs/utils/chart/index.d.ts +7 -11
  37. package/dist/cjs/utils/chart/index.js +13 -28
  38. package/dist/cjs/utils/misc.d.ts +1 -0
  39. package/dist/cjs/utils/misc.js +6 -0
  40. package/dist/esm/components/ChartInner/useChartInnerProps.js +7 -2
  41. package/dist/esm/components/Tooltip/ChartTooltipContent.d.ts +5 -2
  42. package/dist/esm/components/Tooltip/ChartTooltipContent.js +2 -2
  43. package/dist/esm/components/Tooltip/DefaultTooltipContent/Row.d.ts +2 -1
  44. package/dist/esm/components/Tooltip/DefaultTooltipContent/Row.js +3 -3
  45. package/dist/esm/components/Tooltip/DefaultTooltipContent/{RowTotals.d.ts → RowWithAggregation.d.ts} +2 -1
  46. package/dist/esm/components/Tooltip/DefaultTooltipContent/{RowTotals.js → RowWithAggregation.js} +3 -3
  47. package/dist/esm/components/Tooltip/DefaultTooltipContent/index.d.ts +4 -1
  48. package/dist/esm/components/Tooltip/DefaultTooltipContent/index.js +187 -87
  49. package/dist/esm/components/Tooltip/index.js +1 -1
  50. package/dist/esm/components/Tooltip/styles.css +11 -1
  51. package/dist/esm/hooks/useAxisScales/index.d.ts +1 -0
  52. package/dist/esm/hooks/useAxisScales/index.js +53 -37
  53. package/dist/esm/hooks/useChartOptions/x-axis.d.ts +3 -1
  54. package/dist/esm/hooks/useChartOptions/x-axis.js +4 -3
  55. package/dist/esm/hooks/useSeries/prepare-area.js +1 -0
  56. package/dist/esm/hooks/useSeries/prepare-bar-x.js +1 -0
  57. package/dist/esm/hooks/useSeries/prepare-bar-y.d.ts +1 -0
  58. package/dist/esm/hooks/useSeries/prepare-bar-y.js +1 -0
  59. package/dist/esm/hooks/useSeries/prepare-line.js +1 -0
  60. package/dist/esm/hooks/useSeries/prepare-pie.js +1 -0
  61. package/dist/esm/hooks/useSeries/prepare-radar.js +1 -0
  62. package/dist/esm/hooks/useSeries/prepare-sankey.js +1 -0
  63. package/dist/esm/hooks/useSeries/prepare-scatter.js +1 -0
  64. package/dist/esm/hooks/useSeries/prepare-treemap.js +1 -0
  65. package/dist/esm/hooks/useSeries/prepare-waterfall.js +1 -0
  66. package/dist/esm/hooks/useSeries/types.d.ts +2 -1
  67. package/dist/esm/hooks/utils/bar-x.d.ts +16 -0
  68. package/dist/esm/hooks/utils/bar-x.js +41 -0
  69. package/dist/esm/i18n/keysets/en.json +2 -1
  70. package/dist/esm/i18n/keysets/ru.json +2 -1
  71. package/dist/esm/types/chart/base.d.ts +13 -0
  72. package/dist/esm/types/chart/tooltip.d.ts +19 -1
  73. package/dist/esm/utils/chart/format.d.ts +9 -2
  74. package/dist/esm/utils/chart/format.js +39 -5
  75. package/dist/esm/utils/chart/index.d.ts +7 -11
  76. package/dist/esm/utils/chart/index.js +13 -28
  77. package/dist/esm/utils/misc.d.ts +1 -0
  78. package/dist/esm/utils/misc.js +6 -0
  79. package/package.json +1 -1
@@ -0,0 +1,16 @@
1
+ import type { BarXSeries, BarXSeriesData } from '../../types';
2
+ import type { PreparedAxis } from '../useChartOptions/types';
3
+ import type { PreparedBarXSeries, PreparedSeriesOptions } from '../useSeries/types';
4
+ export declare function groupBarXDataByXValue<T extends BarXSeries | PreparedBarXSeries>(series: T[], xAxis: PreparedAxis): Record<string | number, Record<string, {
5
+ data: BarXSeriesData;
6
+ series: T;
7
+ }[]>>;
8
+ export declare function getBarXLayoutForNumericScale(args: {
9
+ plotWidth: number;
10
+ seriesOptions: PreparedSeriesOptions;
11
+ groupedData: ReturnType<typeof groupBarXDataByXValue>;
12
+ }): {
13
+ bandSize: number;
14
+ barGap: number;
15
+ barSize: number;
16
+ };
@@ -0,0 +1,41 @@
1
+ import get from 'lodash/get';
2
+ import { getDataCategoryValue } from '../../utils';
3
+ import { MIN_BAR_GAP, MIN_BAR_GROUP_GAP, MIN_BAR_WIDTH } from '../constants';
4
+ import { getSeriesStackId } from '../useSeries/utils';
5
+ export function groupBarXDataByXValue(series, xAxis) {
6
+ const data = {};
7
+ series.forEach((s) => {
8
+ s.data.forEach((d) => {
9
+ var _a;
10
+ const categories = (_a = xAxis.categories) !== null && _a !== void 0 ? _a : [];
11
+ const key = xAxis.type === 'category'
12
+ ? getDataCategoryValue({ axisDirection: 'x', categories, data: d })
13
+ : d.x;
14
+ if (key) {
15
+ if (!data[key]) {
16
+ data[key] = {};
17
+ }
18
+ const stackId = getSeriesStackId(s);
19
+ if (!data[key][stackId]) {
20
+ data[key][stackId] = [];
21
+ }
22
+ data[key][stackId].push({ data: d, series: s });
23
+ }
24
+ });
25
+ });
26
+ return data;
27
+ }
28
+ export function getBarXLayoutForNumericScale(args) {
29
+ const { plotWidth, groupedData, seriesOptions } = args;
30
+ const barMaxWidth = get(seriesOptions, 'bar-x.barMaxWidth');
31
+ const barPadding = get(seriesOptions, 'bar-x.barPadding');
32
+ const groupPadding = get(seriesOptions, 'bar-x.groupPadding');
33
+ const groups = Object.values(groupedData);
34
+ const maxGroupItemCount = groups.reduce((acc, items) => Math.max(acc, Object.keys(items).length), 0);
35
+ const bandSize = plotWidth / groups.length;
36
+ const groupGap = Math.max(bandSize * groupPadding, MIN_BAR_GROUP_GAP);
37
+ const groupSize = bandSize - groupGap;
38
+ const barGap = Math.max(bandSize * barPadding, MIN_BAR_GAP);
39
+ const barSize = Math.max(MIN_BAR_WIDTH, Math.min((groupSize - barGap) / maxGroupItemCount, barMaxWidth));
40
+ return { bandSize, barGap, barSize };
41
+ }
@@ -21,6 +21,7 @@
21
21
  "label_invalid-axis-labels-html-not-supported-axis-type": "It seems you are trying to use \"labels.html\" property for an axis with an unsupported type. This property is supported only for \"category\" axis."
22
22
  },
23
23
  "tooltip": {
24
- "label_totals_sum": "Sum"
24
+ "label_totals_sum": "Sum",
25
+ "label_more": "{{count}} more"
25
26
  }
26
27
  }
@@ -21,6 +21,7 @@
21
21
  "label_invalid-axis-labels-html-not-supported-axis-type": "Похоже, что вы пытаетесь использовать свойство \"labels.html\" для оси с неподдерживаемым типом. Это свойство поддерживается только для оси типа \"category\"."
22
22
  },
23
23
  "tooltip": {
24
- "label_totals_sum": "Сумма"
24
+ "label_totals_sum": "Сумма",
25
+ "label_more": "Еще {{count}}"
25
26
  }
26
27
  }
@@ -7,6 +7,12 @@ type DateFormat = {
7
7
  type: 'date';
8
8
  format?: string;
9
9
  };
10
+ export type CustomFormat = {
11
+ type: 'custom';
12
+ formatter: (args: {
13
+ value: unknown;
14
+ }) => string;
15
+ };
10
16
  export type ValueFormat = NumberFormat | DateFormat;
11
17
  export interface BaseSeries {
12
18
  /** Initial visibility of the series */
@@ -41,6 +47,13 @@ export interface BaseSeries {
41
47
  };
42
48
  /** You can set the cursor to "pointer" if you have click events attached to the series, to signal to the user that the points and lines can be clicked. */
43
49
  cursor?: string;
50
+ /**
51
+ * Options for the tooltip that appears when the user hovers over a series or point.
52
+ */
53
+ tooltip?: {
54
+ /** Formatting settings for tooltip value. */
55
+ valueFormat?: ValueFormat;
56
+ };
44
57
  }
45
58
  export interface BaseSeriesData<T = MeaningfulAny> {
46
59
  /**
@@ -4,7 +4,7 @@ import type { AreaSeries, AreaSeriesData } from './area';
4
4
  import type { ChartXAxis, ChartYAxis } from './axis';
5
5
  import type { BarXSeries, BarXSeriesData } from './bar-x';
6
6
  import type { BarYSeries, BarYSeriesData } from './bar-y';
7
- import type { ValueFormat } from './base';
7
+ import type { CustomFormat, ValueFormat } from './base';
8
8
  import type { LineSeries, LineSeriesData } from './line';
9
9
  import type { PieSeries, PieSeriesData } from './pie';
10
10
  import type { RadarSeries, RadarSeriesCategory, RadarSeriesData } from './radar';
@@ -84,10 +84,24 @@ export interface ChartTooltipTotalsAggregationArgs<T = MeaningfulAny> extends Ch
84
84
  }
85
85
  export type ChartTooltipTotalsBuiltInAggregation = (typeof TOOLTIP_TOTALS_BUILT_IN_AGGREGATION)[keyof typeof TOOLTIP_TOTALS_BUILT_IN_AGGREGATION];
86
86
  export type ChartTooltipTotalsAggregationValue = number | string | undefined;
87
+ export type ChartTooltipRowRendererArgs = {
88
+ id: string;
89
+ name: string;
90
+ active?: boolean;
91
+ color?: string;
92
+ striped?: boolean;
93
+ value: string | number | null | undefined;
94
+ formattedValue?: string;
95
+ hovered?: TooltipDataChunk<unknown>[];
96
+ className?: string;
97
+ };
87
98
  export interface ChartTooltip<T = MeaningfulAny> {
88
99
  enabled?: boolean;
89
100
  /** Specifies the renderer for the tooltip. If returned null default tooltip renderer will be used. */
90
101
  renderer?: (args: ChartTooltipRendererArgs<T>) => React.ReactElement | null;
102
+ /** Defines the way a single data/series is displayed (corresponding to a separate selected point/ruler/shape on the chart).
103
+ * It is useful in cases where you need to display additional information, but keep the general format of the tooltip. */
104
+ rowRenderer?: (args: ChartTooltipRowRendererArgs) => React.ReactElement | null;
91
105
  pin?: {
92
106
  enabled?: boolean;
93
107
  modifierKey?: 'altKey' | 'metaKey';
@@ -96,6 +110,8 @@ export interface ChartTooltip<T = MeaningfulAny> {
96
110
  throttle?: number;
97
111
  /** Formatting settings for tooltip value. */
98
112
  valueFormat?: ValueFormat;
113
+ /** Formatting settings for tooltip header row. */
114
+ headerFormat?: ValueFormat | CustomFormat;
99
115
  /** Settings for totals block in tooltip */
100
116
  totals?: {
101
117
  /**
@@ -111,5 +127,7 @@ export interface ChartTooltip<T = MeaningfulAny> {
111
127
  enabled?: boolean;
112
128
  /** The label text for the totals. For built-in aggregations, the label can be omitted. */
113
129
  label?: string;
130
+ /** Formatting settings for totals tooltip value. */
131
+ valueFormat?: ValueFormat;
114
132
  };
115
133
  }
@@ -1,5 +1,12 @@
1
- import type { ValueFormat } from '../../types';
1
+ import type { AxisDomain } from 'd3';
2
+ import type { PreparedAxis } from '../../hooks';
3
+ import type { CustomFormat, ValueFormat } from '../../types';
2
4
  export declare function getFormattedValue(args: {
3
5
  value: string | number | undefined | null;
4
- format?: ValueFormat;
6
+ format?: ValueFormat | CustomFormat;
7
+ }): string;
8
+ export declare function formatAxisTickLabel(args: {
9
+ axis: PreparedAxis;
10
+ value: AxisDomain;
11
+ step?: number;
5
12
  }): string;
@@ -1,17 +1,51 @@
1
1
  import { dateTime } from '@gravity-ui/date-utils';
2
- import { formatNumber } from '../../libs';
2
+ import capitalize from 'lodash/capitalize';
3
+ import { formatNumber, getDefaultUnit } from '../../libs';
4
+ import { getDefaultDateFormat } from './time';
5
+ const LETTER_MOUNTH_AT_START_FORMAT_REGEXP = /^M{3,}/;
6
+ function getFormattedDate(args) {
7
+ const { value, format = '' } = args;
8
+ const date = dateTime({ input: value });
9
+ if (date === null || date === void 0 ? void 0 : date.isValid()) {
10
+ const formattedDate = date.format(format);
11
+ if (LETTER_MOUNTH_AT_START_FORMAT_REGEXP.test(format)) {
12
+ return capitalize(formattedDate);
13
+ }
14
+ return formattedDate;
15
+ }
16
+ return String(value);
17
+ }
3
18
  export function getFormattedValue(args) {
19
+ var _a;
4
20
  const { value, format } = args;
5
21
  switch (format === null || format === void 0 ? void 0 : format.type) {
6
22
  case 'number': {
7
23
  return formatNumber(Number(value), format);
8
24
  }
9
25
  case 'date': {
10
- const date = dateTime({ input: value });
11
- if (date === null || date === void 0 ? void 0 : date.isValid()) {
12
- return date.format(format.format);
13
- }
26
+ return getFormattedDate({ value, format: format.format });
27
+ }
28
+ case 'custom': {
29
+ return (_a = format.formatter) === null || _a === void 0 ? void 0 : _a.call(format, { value });
14
30
  }
15
31
  }
16
32
  return String(value);
17
33
  }
34
+ export function formatAxisTickLabel(args) {
35
+ const { axis, value, step } = args;
36
+ switch (axis.type) {
37
+ case 'category': {
38
+ return value;
39
+ }
40
+ case 'datetime': {
41
+ const date = value;
42
+ const format = axis.labels.dateFormat || getDefaultDateFormat(step);
43
+ return getFormattedDate({ value: date, format });
44
+ }
45
+ case 'linear':
46
+ default: {
47
+ const numberFormat = Object.assign({ unit: value && step ? getDefaultUnit(step) : undefined }, axis.labels.numberFormat);
48
+ return formatNumber(value, numberFormat);
49
+ }
50
+ }
51
+ }
@@ -2,15 +2,16 @@ import type { AxisDomain } from 'd3';
2
2
  import type { PreparedAxis } from '../../hooks';
3
3
  import type { BaseTextStyle, ChartSeries, ChartSeriesData } from '../../types';
4
4
  import type { AxisDirection } from './types';
5
- export * from './math';
6
- export * from './text';
7
- export * from './time';
8
5
  export * from './axis';
6
+ export * from './color';
7
+ export * from './format';
9
8
  export * from './labels';
10
9
  export * from './legend';
11
- export * from './symbol';
10
+ export * from './math';
12
11
  export * from './series';
13
- export * from './color';
12
+ export * from './symbol';
13
+ export * from './text';
14
+ export * from './time';
14
15
  export * from './zoom';
15
16
  export declare const CHART_SERIES_WITH_VOLUME_ON_Y_AXIS: ChartSeries['type'][];
16
17
  export declare const CHART_SERIES_WITH_VOLUME_ON_X_AXIS: ChartSeries['type'][];
@@ -43,7 +44,7 @@ export declare function isSeriesWithCategoryValues(series: UnknownSeries): serie
43
44
  category: string;
44
45
  }[];
45
46
  };
46
- export declare const getDomainDataXBySeries: (series: UnknownSeries[]) => unknown[];
47
+ export declare const getDomainDataXBySeries: (series: UnknownSeries[]) => ({} | undefined)[];
47
48
  export declare function getDefaultMaxXAxisValue(series: UnknownSeries[]): 0 | undefined;
48
49
  export declare function getDefaultMinXAxisValue(series: UnknownSeries[]): number | undefined;
49
50
  export declare function getDefaultMinYAxisValue(series?: UnknownSeries[]): number | undefined;
@@ -56,11 +57,6 @@ export declare const parseTransformStyle: (style: string | null) => {
56
57
  x?: number;
57
58
  y?: number;
58
59
  };
59
- export declare const formatAxisTickLabel: (args: {
60
- axis: PreparedAxis;
61
- value: AxisDomain;
62
- step?: number;
63
- }) => string;
64
60
  export declare const getHorizontalHtmlTextHeight: (args: {
65
61
  text: string;
66
62
  style?: Partial<BaseTextStyle>;
@@ -1,22 +1,20 @@
1
- import { dateTime } from '@gravity-ui/date-utils';
2
1
  import { group, select } from 'd3';
3
2
  import get from 'lodash/get';
4
3
  import isNil from 'lodash/isNil';
5
4
  import sortBy from 'lodash/sortBy';
6
5
  import { DEFAULT_AXIS_LABEL_FONT_SIZE } from '../../constants';
7
6
  import { getSeriesStackId } from '../../hooks/useSeries/utils';
8
- import { formatNumber, getDefaultUnit } from '../../libs/format-number';
9
7
  import { getWaterfallPointSubtotal } from './series/waterfall';
10
- import { getDefaultDateFormat } from './time';
11
- export * from './math';
12
- export * from './text';
13
- export * from './time';
14
8
  export * from './axis';
9
+ export * from './color';
10
+ export * from './format';
15
11
  export * from './labels';
16
12
  export * from './legend';
17
- export * from './symbol';
13
+ export * from './math';
18
14
  export * from './series';
19
- export * from './color';
15
+ export * from './symbol';
16
+ export * from './text';
17
+ export * from './time';
20
18
  export * from './zoom';
21
19
  const CHARTS_WITHOUT_AXIS = ['pie', 'treemap', 'sankey', 'radar'];
22
20
  export const CHART_SERIES_WITH_VOLUME_ON_Y_AXIS = [
@@ -51,7 +49,11 @@ function getDomainDataForStackedSeries(seriesList, keyAttr = 'x', valueAttr = 'y
51
49
  seriesStack.forEach((singleSeries) => {
52
50
  const data = new Map();
53
51
  singleSeries.data.forEach((point) => {
54
- const key = String(point[keyAttr]);
52
+ const keyValue = point[keyAttr];
53
+ if (keyValue === null) {
54
+ return;
55
+ }
56
+ const key = String(keyValue);
55
57
  let value = 0;
56
58
  if (valueAttr in point && typeof point[valueAttr] === 'number') {
57
59
  value = point[valueAttr];
@@ -71,7 +73,7 @@ function getDomainDataForStackedSeries(seriesList, keyAttr = 'x', valueAttr = 'y
71
73
  }
72
74
  export const getDomainDataXBySeries = (series) => {
73
75
  const groupedSeries = group(series, (item) => item.type);
74
- return Array.from(groupedSeries).reduce((acc, [type, seriesList]) => {
76
+ const values = Array.from(groupedSeries).reduce((acc, [type, seriesList]) => {
75
77
  switch (type) {
76
78
  case 'bar-y': {
77
79
  acc.push(...getDomainDataForStackedSeries(seriesList, 'y', 'x'));
@@ -85,6 +87,7 @@ export const getDomainDataXBySeries = (series) => {
85
87
  }
86
88
  return acc;
87
89
  }, []);
90
+ return Array.from(new Set(values.filter((v) => v !== null)));
88
91
  };
89
92
  export function getDefaultMaxXAxisValue(series) {
90
93
  if (series.some((s) => s.type === 'bar-y')) {
@@ -172,24 +175,6 @@ export const parseTransformStyle = (style) => {
172
175
  const y = Number.isNaN(Number(yString)) ? undefined : Number(yString);
173
176
  return { x, y };
174
177
  };
175
- export const formatAxisTickLabel = (args) => {
176
- const { axis, value, step } = args;
177
- switch (axis.type) {
178
- case 'category': {
179
- return value;
180
- }
181
- case 'datetime': {
182
- const date = value;
183
- const format = axis.labels.dateFormat || getDefaultDateFormat(step);
184
- return dateTime({ input: date }).format(format);
185
- }
186
- case 'linear':
187
- default: {
188
- const numberFormat = Object.assign({ unit: value && step ? getDefaultUnit(step) : undefined }, axis.labels.numberFormat);
189
- return formatNumber(value, numberFormat);
190
- }
191
- }
192
- };
193
178
  export const getHorizontalHtmlTextHeight = (args) => {
194
179
  var _a;
195
180
  const { text, style } = args;
@@ -11,3 +11,4 @@ export declare function isMacintosh(): boolean;
11
11
  export declare function measurePerformance(): {
12
12
  end(): number;
13
13
  };
14
+ export declare function hasVerticalScrollbar(node: HTMLElement | null): boolean;
@@ -26,3 +26,9 @@ export function measurePerformance() {
26
26
  },
27
27
  };
28
28
  }
29
+ export function hasVerticalScrollbar(node) {
30
+ if (!node) {
31
+ return false;
32
+ }
33
+ return node.scrollHeight > node.clientHeight;
34
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravity-ui/charts",
3
- "version": "1.14.0",
3
+ "version": "1.16.0",
4
4
  "description": "React component used to render charts",
5
5
  "license": "MIT",
6
6
  "main": "dist/cjs/index.js",